import * as i0 from '@angular/core';
import { Injector } from '@angular/core';
import { AXPEntity, AXPMenuProvider, AXPMenuProviderContext, AXPSearchCommandProvider, AXPSearchResult } from '@acorex/platform/common';
import { AXPEntityDefinitionLoader } from '@acorex/platform/layout/entity';
import { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';
import * as i1 from '@acorex/platform/layout/widget-core';

declare const RootConfig: {
    config: {
        i18n: string;
    };
    module: {
        module: string;
        name: string;
        title: string;
        icon: string;
    };
    entities: {
        skillCategory: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        skill: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        skillLevel: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        courseType: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        trainingDefinition: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        course: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        trainingType: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        training: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        enrollment: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        attendance: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        certificateType: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        certificateDefinition: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        certificate: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        learningPath: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        learningPathCourse: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        mandatoryTrainingRule: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
    };
};

declare class AXMLearningManagementEntityProvider implements AXPEntityDefinitionLoader {
    private readonly injector;
    constructor(injector: Injector);
    get(moduleName: string, entityName: string): Promise<AXPEntity | null>;
    list(): Promise<{
        name: string;
        module: string;
    }[]>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMLearningManagementEntityProvider, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMLearningManagementEntityProvider>;
}

/**
 * Learning Management Module Menu Provider.
 * - Root "Learning": Skills, Courses, Trainings, Enrollments, Certificates, Learning Paths (operational)
 * - Configuration/Learning: Skill Levels, Course Types, Training Definitions/Types, Certificate Definitions/Types, Mandatory Training Rules (reference)
 */
declare class AXMLearningManagementMenuProvider implements AXPMenuProvider {
    private readonly entityService;
    provide(context: AXPMenuProviderContext): Promise<void>;
}

declare const AXMLearningManagementMenuKeys: {
    readonly Root: "learning-management:menu";
    readonly ConfigurationRoot: "learning-management:menu:configuration";
    readonly Skills: "learning-management:menu:skills";
    readonly Courses: "learning-management:menu:courses";
    readonly Trainings: "learning-management:menu:trainings";
    readonly Enrollments: "learning-management:menu:enrollments";
    readonly Certificates: "learning-management:menu:certificates";
    readonly LearningPaths: "learning-management:menu:learning-paths";
    readonly Compliance: "learning-management:menu:compliance";
};

declare class AXMLearningManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {
    private readonly injector;
    private readonly translationService;
    constructor(injector: Injector);
    define(context: AXPPermissionDefinitionProviderContext): Promise<void>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMLearningManagementPermissionDefinitionProvider, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMLearningManagementPermissionDefinitionProvider>;
}

declare const AXMLearningManagementPermissionKeys: {
    readonly LearningManagement: {
        readonly Management: "LearningManagement:Permission:Management";
        readonly SkillCategory: {
            readonly Management: "LearningManagement:Permission:SkillCategory.Management";
            readonly View: "LearningManagement:Permission:SkillCategory.View";
            readonly Create: "LearningManagement:Permission:SkillCategory.Create";
            readonly Update: "LearningManagement:Permission:SkillCategory.Update";
            readonly Delete: "LearningManagement:Permission:SkillCategory.Delete";
        };
        readonly Skill: {
            readonly Management: "LearningManagement:Permission:Skill.Management";
            readonly View: "LearningManagement:Permission:Skill.View";
            readonly Create: "LearningManagement:Permission:Skill.Create";
            readonly Update: "LearningManagement:Permission:Skill.Update";
            readonly Delete: "LearningManagement:Permission:Skill.Delete";
        };
        readonly SkillLevel: {
            readonly Management: "LearningManagement:Permission:SkillLevel.Management";
            readonly View: "LearningManagement:Permission:SkillLevel.View";
            readonly Create: "LearningManagement:Permission:SkillLevel.Create";
            readonly Update: "LearningManagement:Permission:SkillLevel.Update";
            readonly Delete: "LearningManagement:Permission:SkillLevel.Delete";
        };
        readonly CourseType: {
            readonly Management: "LearningManagement:Permission:CourseType.Management";
            readonly View: "LearningManagement:Permission:CourseType.View";
            readonly Create: "LearningManagement:Permission:CourseType.Create";
            readonly Update: "LearningManagement:Permission:CourseType.Update";
            readonly Delete: "LearningManagement:Permission:CourseType.Delete";
        };
        readonly Course: {
            readonly Management: "LearningManagement:Permission:Course.Management";
            readonly View: "LearningManagement:Permission:Course.View";
            readonly Create: "LearningManagement:Permission:Course.Create";
            readonly Update: "LearningManagement:Permission:Course.Update";
            readonly Delete: "LearningManagement:Permission:Course.Delete";
            readonly Publish: "LearningManagement:Permission:Course.Publish";
        };
        readonly TrainingType: {
            readonly Management: "LearningManagement:Permission:TrainingType.Management";
            readonly View: "LearningManagement:Permission:TrainingType.View";
            readonly Create: "LearningManagement:Permission:TrainingType.Create";
            readonly Update: "LearningManagement:Permission:TrainingType.Update";
            readonly Delete: "LearningManagement:Permission:TrainingType.Delete";
        };
        readonly TrainingDefinition: {
            readonly Management: "LearningManagement:Permission:TrainingDefinition.Management";
            readonly View: "LearningManagement:Permission:TrainingDefinition.View";
            readonly Create: "LearningManagement:Permission:TrainingDefinition.Create";
            readonly Update: "LearningManagement:Permission:TrainingDefinition.Update";
            readonly Delete: "LearningManagement:Permission:TrainingDefinition.Delete";
            readonly Publish: "LearningManagement:Permission:TrainingDefinition.Publish";
        };
        readonly Training: {
            readonly Management: "LearningManagement:Permission:Training.Management";
            readonly View: "LearningManagement:Permission:Training.View";
            readonly Create: "LearningManagement:Permission:Training.Create";
            readonly Update: "LearningManagement:Permission:Training.Update";
            readonly Delete: "LearningManagement:Permission:Training.Delete";
            readonly Schedule: "LearningManagement:Permission:Training.Schedule";
            readonly Close: "LearningManagement:Permission:Training.Close";
        };
        readonly Enrollment: {
            readonly Management: "LearningManagement:Permission:Enrollment.Management";
            readonly View: "LearningManagement:Permission:Enrollment.View";
            readonly Create: "LearningManagement:Permission:Enrollment.Create";
            readonly Update: "LearningManagement:Permission:Enrollment.Update";
            readonly Delete: "LearningManagement:Permission:Enrollment.Delete";
            readonly Process: "LearningManagement:Permission:Enrollment.Process";
        };
        readonly Attendance: {
            readonly Management: "LearningManagement:Permission:Attendance.Management";
            readonly View: "LearningManagement:Permission:Attendance.View";
            readonly Create: "LearningManagement:Permission:Attendance.Create";
            readonly Update: "LearningManagement:Permission:Attendance.Update";
            readonly Delete: "LearningManagement:Permission:Attendance.Delete";
            readonly Record: "LearningManagement:Permission:Attendance.Record";
        };
        readonly CertificateType: {
            readonly Management: "LearningManagement:Permission:CertificateType.Management";
            readonly View: "LearningManagement:Permission:CertificateType.View";
            readonly Create: "LearningManagement:Permission:CertificateType.Create";
            readonly Update: "LearningManagement:Permission:CertificateType.Update";
            readonly Delete: "LearningManagement:Permission:CertificateType.Delete";
        };
        readonly CertificateDefinition: {
            readonly Management: "LearningManagement:Permission:CertificateDefinition.Management";
            readonly View: "LearningManagement:Permission:CertificateDefinition.View";
            readonly Create: "LearningManagement:Permission:CertificateDefinition.Create";
            readonly Update: "LearningManagement:Permission:CertificateDefinition.Update";
            readonly Delete: "LearningManagement:Permission:CertificateDefinition.Delete";
            readonly Publish: "LearningManagement:Permission:CertificateDefinition.Publish";
        };
        readonly Certificate: {
            readonly Management: "LearningManagement:Permission:Certificate.Management";
            readonly View: "LearningManagement:Permission:Certificate.View";
            readonly Create: "LearningManagement:Permission:Certificate.Create";
            readonly Update: "LearningManagement:Permission:Certificate.Update";
            readonly Delete: "LearningManagement:Permission:Certificate.Delete";
            readonly Issue: "LearningManagement:Permission:Certificate.Issue";
            readonly Renew: "LearningManagement:Permission:Certificate.Renew";
        };
        readonly LearningPath: {
            readonly Management: "LearningManagement:Permission:LearningPath.Management";
            readonly View: "LearningManagement:Permission:LearningPath.View";
            readonly Create: "LearningManagement:Permission:LearningPath.Create";
            readonly Update: "LearningManagement:Permission:LearningPath.Update";
            readonly Delete: "LearningManagement:Permission:LearningPath.Delete";
            readonly Publish: "LearningManagement:Permission:LearningPath.Publish";
            readonly Assign: "LearningManagement:Permission:LearningPath.Assign";
        };
        readonly MandatoryTrainingRule: {
            readonly Management: "LearningManagement:Permission:MandatoryTrainingRule.Management";
            readonly View: "LearningManagement:Permission:MandatoryTrainingRule.View";
            readonly Create: "LearningManagement:Permission:MandatoryTrainingRule.Create";
            readonly Update: "LearningManagement:Permission:MandatoryTrainingRule.Update";
            readonly Delete: "LearningManagement:Permission:MandatoryTrainingRule.Delete";
            readonly Activate: "LearningManagement:Permission:MandatoryTrainingRule.Activate";
        };
    };
};

declare class AXMLearningManagementSearchCommandProvider extends AXPSearchCommandProvider {
    commands: AXPSearchResult[];
}

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

interface AXMLearningManagementSkillEntityModel {
    id: string;
    title: string;
    description?: string | null;
    code?: string | null;
    categoryIds: string[];
    categories?: Array<{
        id: string;
        title: string;
    }>;
    relatedCourseIds?: string[];
    createdAt?: Date;
    updatedAt?: Date;
}

interface AXMLearningManagementSkillLevelEntityModel {
    id: string;
    name: string;
    levelNumber: number;
    description?: string | null;
    createdAt?: Date;
    updatedAt?: Date;
}

interface AXMLearningManagementCourseTypeEntityModel {
    id: string;
    name: string;
    description?: string | null;
    deliveryMode?: string | null;
    createdAt?: Date;
    updatedAt?: Date;
}

interface AXMLearningManagementCourseEntityModel {
    id: string;
    code: string;
    title: string;
    description?: string | null;
    courseTypeId: string;
    durationHours?: number | null;
    relatedSkillIds: string[];
    certificateDefinitionIds?: string[];
    courseType?: {
        id: string;
        name: string;
    };
    skills?: Array<{
        id: string;
        title: string;
    }>;
    certificateDefinitions?: Array<{
        id: string;
        title: string;
    }>;
    createdAt?: Date;
    updatedAt?: Date;
}

interface AXMLearningManagementTrainingTypeEntityModel {
    id: string;
    name: string;
    description?: string | null;
    createdAt?: Date;
    updatedAt?: Date;
}

interface AXMLearningManagementTrainingDefinitionEntityModel {
    id: string;
    title: string;
    description?: string | null;
    courseId: string;
    course?: {
        id: string;
        title: string;
    };
    trainingTypeId: string;
    trainingType?: {
        id: string;
        name: string;
    };
    defaultDurationHours?: number | null;
    defaultCapacity?: number | null;
    defaultLocationId?: string | null;
    defaultLocation?: {
        id: string;
        title: string;
    };
    isActive: boolean;
    createdAt?: Date;
    updatedAt?: Date;
}

type TrainingStatus = 'Draft' | 'Open' | 'Closed' | 'Cancelled';
interface AXMLearningManagementTrainingEntityModel {
    id: string;
    trainingDefinitionId: string;
    courseId: string;
    trainingTypeId: string;
    startDate: string;
    endDate: string;
    locationId?: string | null;
    instructorId?: string | null;
    capacity?: number | null;
    status: TrainingStatus;
    trainingDefinition?: {
        id: string;
        title: string;
    };
    course?: {
        id: string;
        title: string;
    };
    trainingType?: {
        id: string;
        name: string;
    };
    location?: {
        id: string;
        title: string;
    };
    instructor?: {
        id: string;
        displayName: string;
    };
    createdAt?: Date;
    updatedAt?: Date;
}

type EnrollmentStatus = 'Requested' | 'Approved' | 'Enrolled' | 'Completed' | 'Failed' | 'Cancelled';
interface AXMLearningManagementEnrollmentEntityModel {
    id: string;
    employeeId: string;
    trainingId: string;
    status: EnrollmentStatus;
    workflowInstanceId?: string | null;
    employee?: {
        id: string;
        displayName: string;
    };
    training?: {
        id: string;
        title: string;
    };
    createdAt?: Date;
    updatedAt?: Date;
}

type AttendanceStatus = 'Present' | 'Absent' | 'Late';
interface AXMLearningManagementAttendanceEntityModel {
    id: string;
    enrollmentId: string;
    sessionDate: string;
    status: AttendanceStatus;
    enrollment?: {
        id: string;
        employeeId: string;
        trainingId: string;
    };
    notes?: string | null;
    createdAt?: Date;
    updatedAt?: Date;
}

interface AXMLearningManagementCertificateTypeEntityModel {
    id: string;
    name: string;
    description?: string | null;
    validityDays?: number | null;
    templateId?: string | null;
    createdAt?: Date;
    updatedAt?: Date;
}

interface AXMLearningManagementCertificateDefinitionEntityModel {
    id: string;
    title: string;
    description?: string | null;
    certificateTypeId: string;
    certificateType?: {
        id: string;
        name: string;
    };
    courseId?: string | null;
    course?: {
        id: string;
        title: string;
    };
    validityDays?: number | null;
    templateId?: string | null;
    isActive: boolean;
    createdAt?: Date;
    updatedAt?: Date;
}

interface AXMLearningManagementCertificateEntityModel {
    id: string;
    certificateDefinitionId: string;
    certificateTypeId: string;
    employeeId: string;
    courseId?: string | null;
    issueDate: string;
    expiryDate?: string | null;
    fileId?: string | null;
    certificateDefinition?: {
        id: string;
        title: string;
    };
    certificateType?: {
        id: string;
        name: string;
    };
    employee?: {
        id: string;
        displayName: string;
    };
    course?: {
        id: string;
        title: string;
    };
    createdAt?: Date;
    updatedAt?: Date;
}

interface AXMLearningManagementLearningPathEntityModel {
    id: string;
    name: string;
    description?: string | null;
    isActive: boolean;
    createdAt?: Date;
    updatedAt?: Date;
}

interface AXMLearningManagementLearningPathCourseEntityModel {
    id: string;
    learningPathId: string;
    courseId: string;
    orderIndex: number;
    course?: {
        id: string;
        title: string;
    };
    createdAt?: Date;
    updatedAt?: Date;
}

interface AXMLearningManagementMandatoryTrainingRuleEntityModel {
    id: string;
    positionId: string;
    courseId: string;
    frequencyMonths?: number | null;
    position?: {
        id: string;
        title: string;
    };
    course?: {
        id: string;
        title: string;
    };
    createdAt?: Date;
    updatedAt?: Date;
}

export { AXMLearningManagementEntityProvider, AXMLearningManagementMenuKeys, AXMLearningManagementMenuProvider, AXMLearningManagementModule, AXMLearningManagementPermissionDefinitionProvider, AXMLearningManagementPermissionKeys, AXMLearningManagementSearchCommandProvider, RootConfig };
export type { AXMLearningManagementAttendanceEntityModel, AXMLearningManagementCertificateDefinitionEntityModel, AXMLearningManagementCertificateEntityModel, AXMLearningManagementCertificateTypeEntityModel, AXMLearningManagementCourseEntityModel, AXMLearningManagementCourseTypeEntityModel, AXMLearningManagementEnrollmentEntityModel, AXMLearningManagementLearningPathCourseEntityModel, AXMLearningManagementLearningPathEntityModel, AXMLearningManagementMandatoryTrainingRuleEntityModel, AXMLearningManagementSkillEntityModel, AXMLearningManagementSkillLevelEntityModel, AXMLearningManagementTrainingDefinitionEntityModel, AXMLearningManagementTrainingEntityModel, AXMLearningManagementTrainingTypeEntityModel, AttendanceStatus, EnrollmentStatus, TrainingStatus };
