import { BaseRepositoryPort } from '@humand-packages/common';
import { TimeTrackingPolicyApprovalStepsParams } from '../../business/interfaces/timeTracking/policyApprovalStepsParams';
import {
    TimeTrackingPolicyApprovalStepResponsibleRelationForCreation,
    TimeTrackingPolicyApprovalStepResponsibleRelation,
} from '../../business/models/policies/approvalSteps/responsibles/relation';
import {
    TimeTrackingPolicyApprovalStepResponsibleSegmentationItemForCreation,
    TimeTrackingPolicyApprovalStepResponsibleSegmentationItem,
} from '../../business/models/policies/approvalSteps/responsibles/segmentationItem';
import {
    TimeTrackingPolicyApprovalStepResponsibleUser,
    TimeTrackingPolicyApprovalStepResponsibleUserForCreation,
} from '../../business/models/policies/approvalSteps/responsibles/user';
import {
    TimeTrackingPolicyApprovalStep,
    TimeTrackingPolicyApprovalStepForCreation,
} from '../../business/models/policies/approvalSteps/timeTrackingPolicyApprovalStep';

export default abstract class TimeTrackingPolicyApprovalStepsRepositoryPort extends BaseRepositoryPort {
    abstract listPolicyApprovalSteps(params: TimeTrackingPolicyApprovalStepsParams): Promise<TimeTrackingPolicyApprovalStep[]>;

    abstract createPolicyApprovalStep(step: TimeTrackingPolicyApprovalStepForCreation): Promise<TimeTrackingPolicyApprovalStep>;

    abstract createPolicyApprovalStepResponsibleUsers(
        users: TimeTrackingPolicyApprovalStepResponsibleUserForCreation[],
    ): Promise<TimeTrackingPolicyApprovalStepResponsibleUser[]>;

    abstract createPolicyApprovalStepResponsibleRelations(
        relations: TimeTrackingPolicyApprovalStepResponsibleRelationForCreation[],
    ): Promise<TimeTrackingPolicyApprovalStepResponsibleRelation[]>;

    abstract createPolicyApprovalStepResponsibleSegmentationItems(
        items: TimeTrackingPolicyApprovalStepResponsibleSegmentationItemForCreation[],
    ): Promise<TimeTrackingPolicyApprovalStepResponsibleSegmentationItem[]>;

    abstract deletePolicyApprovalSteps(params: TimeTrackingPolicyApprovalStepsParams): Promise<void>;
}
