import { AXPEntityModel, AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';
import * as i2 from '@acorex/platform/runtime';
import { AXPCommand } from '@acorex/platform/runtime';
import * as i0 from '@angular/core';
import { AXPWorkflowTaskProvider, AXPTaskFilter, AXPTask, AXPExtraField, AXPTaskStatus } from '@acorex/modules/task-management';
import { AXPExecuteCommand, AXPExecuteCommandResult, AXPActionMenuItem } from '@acorex/platform/core';
import { AXPTaskBadgeProvider } from '@acorex/platform/layout/components';
import * as i1 from '@angular/common';

declare const RootConfig: {
    config: {
        i18n: string;
        module: string;
    };
    module: {
        route: string;
        name: string;
        title: string;
        icon: string;
    };
    entities: {
        employee: {
            name: string;
            source: string;
            title: string;
            icon: string;
        };
        employmentType: {
            name: string;
            source: string;
            title: string;
            icon: string;
        };
        skill: {
            name: string;
            source: string;
            title: string;
            icon: string;
        };
        skillLevel: {
            name: string;
            source: string;
            title: string;
            icon: string;
        };
        employeeSkill: {
            name: string;
            source: string;
            title: string;
            icon: string;
        };
        positionAssignment: {
            name: string;
            source: string;
            title: string;
            icon: string;
        };
        leaveType: {
            name: string;
            source: string;
            title: string;
            icon: string;
        };
        leaveRequest: {
            name: string;
            source: string;
            title: string;
            icon: string;
        };
    };
};

interface AXMHumanCapitalManagementEmployeeEntityModel extends AXPEntityModel<string> {
    employeeCode: string;
    roleId: string;
    positionId: string;
    employmentTypeId: string;
    hireDate: Date;
    contactId?: string;
    userId?: string;
    managerId?: string;
    manager?: AXMHumanCapitalManagementEmployeeEntityModel;
    partyId?: string;
    party?: {
        id: string;
        displayName?: string;
    };
}

declare abstract class AXMHumanCapitalManagementEmployeeEntityService extends AXMEntityCrudServiceImpl<string, AXMHumanCapitalManagementEmployeeEntityModel> {
}

interface AXMHumanCapitalManagementSkillEntityModel extends AXPEntityModel<string> {
    title: string;
    description: string;
    categoriesId?: string[];
    categories?: {
        id: string;
        title: string;
    }[];
}

declare abstract class AXMHumanCapitalManagementSkillEntityService extends AXMEntityCrudServiceImpl<string, AXMHumanCapitalManagementSkillEntityModel> {
}

interface AXMHumanCapitalManagementSkillLevelEntityModel extends AXPEntityModel<string> {
    title: string;
    description?: string;
    isActive?: boolean;
}

declare abstract class AXMHumanCapitalManagementSkillLevelEntityService extends AXMEntityCrudServiceImpl<string, AXMHumanCapitalManagementSkillLevelEntityModel> {
}

interface AXMHumanCapitalManagementEmployeeSkillEntityModel extends AXPEntityModel<string> {
    employeeId: string;
    employee?: {
        id: string;
        employeeCode?: string;
        party?: {
            id: string;
            displayName?: string;
        };
    };
    skillId: string;
    skill?: {
        id: string;
        title: string;
    };
    levelId: string;
    level?: {
        id: string;
        title: string;
    };
    yearsOfExperience?: number;
    lastUsedDate?: Date;
    validatedBy?: string;
    validationSource?: string;
    validationDate?: Date;
    notes?: string;
}

declare abstract class AXMHumanCapitalManagementEmployeeSkillEntityService extends AXMEntityCrudServiceImpl<string, AXMHumanCapitalManagementEmployeeSkillEntityModel> {
}

interface AXMHumanCapitalManagementEmploymentTypeEntityModel {
    id: string;
    title: string;
    description?: string;
}

declare abstract class AXMHumanCapitalManagementEmploymentTypeEntityService extends AXMEntityCrudServiceImpl<string, AXMHumanCapitalManagementEmploymentTypeEntityModel> {
}

type AXMHumanCapitalManagementLeaveRequestStatus = 'Pending' | 'Approved' | 'Rejected' | 'Cancelled';
interface AXMLeaveRequestStatusChange {
    status: AXMHumanCapitalManagementLeaveRequestStatus;
    changedAt: Date;
    changedBy: string;
    note?: string;
}
interface AXMHumanCapitalManagementLeaveRequestEntityModel extends AXPEntityModel<string> {
    employeeId: string;
    employee?: AXMHumanCapitalManagementEmployeeEntityModel;
    leaveTypeId: string;
    leaveType?: {
        id: string;
        title: string;
    };
    startDate: Date;
    endDate: Date;
    durationDays?: number;
    reason?: string;
    status?: AXMHumanCapitalManagementLeaveRequestStatus;
    statusNote?: string;
    statusHistory?: AXMLeaveRequestStatusChange[];
}

declare abstract class AXMHumanCapitalManagementLeaveRequestEntityService extends AXMEntityCrudServiceImpl<string, AXMHumanCapitalManagementLeaveRequestEntityModel> {
}

interface AXPLeaveRequestCommandInput {
    id: string;
    reason?: string;
    note?: string;
    statusNote?: string;
}
interface AXPLeaveRequestCommandResult {
    success: boolean;
    message?: string;
    leaveRequest?: AXMHumanCapitalManagementLeaveRequestEntityModel;
}

declare class AXPApproveLeaveCommand implements AXPCommand<AXPLeaveRequestCommandInput, AXPLeaveRequestCommandResult> {
    private readonly leaveRequestService;
    execute(input: AXPLeaveRequestCommandInput): Promise<AXPLeaveRequestCommandResult>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPApproveLeaveCommand, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXPApproveLeaveCommand>;
}

declare class AXPRejectLeaveCommand implements AXPCommand<AXPLeaveRequestCommandInput, AXPLeaveRequestCommandResult> {
    private readonly leaveRequestService;
    execute(input: AXPLeaveRequestCommandInput): Promise<AXPLeaveRequestCommandResult>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPRejectLeaveCommand, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXPRejectLeaveCommand>;
}

declare class AXPCancelLeaveCommand implements AXPCommand<AXPLeaveRequestCommandInput, AXPLeaveRequestCommandResult> {
    private readonly leaveRequestService;
    execute(input: AXPLeaveRequestCommandInput): Promise<AXPLeaveRequestCommandResult>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPCancelLeaveCommand, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXPCancelLeaveCommand>;
}

declare class AXMLeaveRequestTaskProvider extends AXPWorkflowTaskProvider<AXMHumanCapitalManagementLeaveRequestEntityModel> {
    private readonly leaveRequestService;
    private readonly commandExecutor;
    private readonly translationService;
    private readonly dialogService;
    get name(): string;
    get title(): string;
    get icon(): string;
    getTasks(options: AXPTaskFilter): Promise<{
        items: AXPTask<AXMHumanCapitalManagementLeaveRequestEntityModel>[];
        total: number;
    }>;
    updateTasks(tasksToUpdate: AXPTask<AXMHumanCapitalManagementLeaveRequestEntityModel>[]): Promise<AXPTask<AXMHumanCapitalManagementLeaveRequestEntityModel>[]>;
    executeCommand(command: AXPExecuteCommand): Promise<AXPExecuteCommandResult>;
    getActions(task?: AXPTask<AXMHumanCapitalManagementLeaveRequestEntityModel>): Promise<AXPActionMenuItem[]>;
    getExtraFields(): Promise<AXPExtraField[]>;
    getStatuses(): Promise<AXPTaskStatus[]>;
    private getPriorityFromStatus;
}

interface LeaveRequestActionDialogResult {
    reason?: string;
    note?: string;
    cancelled: boolean;
}
declare class AXPLeaveRequestDialogService {
    private readonly layoutBuilder;
    private readonly translationService;
    showRejectionDialog(): Promise<LeaveRequestActionDialogResult>;
    showCancellationDialog(): Promise<LeaveRequestActionDialogResult>;
    showApprovalDialog(): Promise<LeaveRequestActionDialogResult>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXPLeaveRequestDialogService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXPLeaveRequestDialogService>;
}

declare class AXMLeaveRequestBadgeProvider implements AXPTaskBadgeProvider {
    private leaveRequestService;
    count: i0.WritableSignal<number>;
    key: string;
    constructor();
    getCount(): Promise<void>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMLeaveRequestBadgeProvider, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMLeaveRequestBadgeProvider>;
}

declare class AXMHumanCapitalManagementEmploymentTypeEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMHumanCapitalManagementEmploymentTypeEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMHumanCapitalManagementEmploymentTypeEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMHumanCapitalManagementEmploymentTypeEntityModule>;
}

declare class AXMHumanCapitalManagementSkillEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMHumanCapitalManagementSkillEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMHumanCapitalManagementSkillEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMHumanCapitalManagementSkillEntityModule>;
}

declare class AXMHumanCapitalManagementSkillLevelEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMHumanCapitalManagementSkillLevelEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMHumanCapitalManagementSkillLevelEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMHumanCapitalManagementSkillLevelEntityModule>;
}

declare class AXMHumanCapitalManagementEmployeeSkillEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMHumanCapitalManagementEmployeeSkillEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMHumanCapitalManagementEmployeeSkillEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMHumanCapitalManagementEmployeeSkillEntityModule>;
}

declare class AXMHumanCapitalManagementPositionAssignmentEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMHumanCapitalManagementPositionAssignmentEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMHumanCapitalManagementPositionAssignmentEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMHumanCapitalManagementPositionAssignmentEntityModule>;
}

declare class AXMHumanCapitalManagementEmployeeEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMHumanCapitalManagementEmployeeEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMHumanCapitalManagementEmployeeEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMHumanCapitalManagementEmployeeEntityModule>;
}

declare class AXMHumanCapitalManagementLeaveTypeEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMHumanCapitalManagementLeaveTypeEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMHumanCapitalManagementLeaveTypeEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMHumanCapitalManagementLeaveTypeEntityModule>;
}

declare class AXMHumanCapitalManagementLeaveRequestEntityModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMHumanCapitalManagementLeaveRequestEntityModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMHumanCapitalManagementLeaveRequestEntityModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMHumanCapitalManagementLeaveRequestEntityModule>;
}

declare class AXMLeaveRequestFeatureModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMLeaveRequestFeatureModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMLeaveRequestFeatureModule, never, [typeof i1.CommonModule, typeof i2.AXPRuntimeModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMLeaveRequestFeatureModule>;
}

declare class AXMHumanCapitalManagementModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMHumanCapitalManagementModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMHumanCapitalManagementModule, never, [typeof i1.CommonModule, typeof i2.AXPRuntimeModule, typeof AXMHumanCapitalManagementEmploymentTypeEntityModule, typeof AXMHumanCapitalManagementSkillEntityModule, typeof AXMHumanCapitalManagementSkillLevelEntityModule, typeof AXMHumanCapitalManagementEmployeeSkillEntityModule, typeof AXMHumanCapitalManagementPositionAssignmentEntityModule, typeof AXMHumanCapitalManagementEmployeeEntityModule, typeof AXMHumanCapitalManagementLeaveTypeEntityModule, typeof AXMHumanCapitalManagementLeaveRequestEntityModule, typeof AXMLeaveRequestFeatureModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMHumanCapitalManagementModule>;
}

export { AXMHumanCapitalManagementEmployeeEntityService, AXMHumanCapitalManagementEmployeeSkillEntityService, AXMHumanCapitalManagementEmploymentTypeEntityService, AXMHumanCapitalManagementLeaveRequestEntityService, AXMHumanCapitalManagementModule, AXMHumanCapitalManagementSkillEntityService, AXMHumanCapitalManagementSkillLevelEntityService, AXMLeaveRequestBadgeProvider, AXMLeaveRequestTaskProvider, AXPApproveLeaveCommand, AXPCancelLeaveCommand, AXPLeaveRequestDialogService, AXPRejectLeaveCommand, RootConfig };
export type { AXMHumanCapitalManagementEmployeeSkillEntityModel, AXMHumanCapitalManagementSkillLevelEntityModel, AXPLeaveRequestCommandInput, AXPLeaveRequestCommandResult, LeaveRequestActionDialogResult };
