import { AXPEntity, AXPMenuProvider, AXPMenuProviderContext, AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex/platform/common';
import * as i0 from '@angular/core';
import { Injector } from '@angular/core';
import { AXPEntityModel, AXMEntityCrudServiceImpl, AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader, AXPEntityPreloadEntity } from '@acorex/platform/layout/entity';
import * as _ngrx_signals from '@ngrx/signals';
import * as i1 from '@acorex/platform/workflow';
import * as i2 from '@acorex/platform/layout/components';

declare const RootConfig: {
    config: {
        i18n: string;
    };
    module: {
        route: string;
        name: string;
        title: string;
        icon: string;
    };
    entities: {
        issueType: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        reportedIssues: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        myReportedIssues: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
        reportNewIssue: {
            name: string;
            title: string;
            titlePlural: string;
            icon: string;
        };
    };
};

declare function issueTypeEntityFactory(injector: Injector): Promise<AXPEntity | null>;

interface AXMHelpDeskIssueTypeEntityModel extends AXPEntityModel<string> {
    name: string;
    title: string;
    description?: string;
}

declare abstract class AXMIssueTypeService extends AXMEntityCrudServiceImpl<string, AXMHelpDeskIssueTypeEntityModel> {
}
declare class AXMIssueTypeServiceImpl extends AXMIssueTypeService {
    constructor();
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMIssueTypeServiceImpl, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMIssueTypeServiceImpl>;
}

declare function reportedIssuesEntityFactory(injector: Injector): Promise<AXPEntity | null>;

interface AXMLogMessage {
    type: 'log' | 'error' | 'warning';
    message: string;
    timeStamp: string;
}

interface AXMHelpDeskReportedIssuesEntityModel extends AXPEntityModel<string> {
    id: string;
    user: any;
    issueType: {
        title: string;
        id: string;
    };
    priority: {
        title: string;
        id: string;
    };
    status: string;
    title: string;
    description: string;
    attachments?: any[];
    systemInfo: string;
    errorLogs: AXMLogMessage[];
    createdAt: Date;
}

declare abstract class AXMReportedIssuesService extends AXMEntityCrudServiceImpl<string, AXMHelpDeskReportedIssuesEntityModel> {
}
declare class AXMReportedIssuesServiceImpl extends AXMReportedIssuesService {
    constructor();
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMReportedIssuesServiceImpl, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMReportedIssuesServiceImpl>;
}

declare function myReportedIssuesEntityFactory(injector: Injector): Promise<AXPEntity | null>;

interface AXMHelpDeskMyReportedIssuesEntityModel extends AXPEntityModel<string> {
    id: string;
    user: any;
    issueType: {
        title: string;
        id: string;
    };
    priority: {
        title: string;
        id: string;
    };
    status: string;
    title: string;
    description: string;
    attachments?: any[];
    systemInfo: string;
    errorLogs: AXMLogMessage[];
    createdAt: Date;
}

declare abstract class AXMMyReportedIssuesService extends AXMEntityCrudServiceImpl<string, AXMHelpDeskMyReportedIssuesEntityModel> {
}
declare class AXMMyReportedIssuesServiceImpl extends AXMMyReportedIssuesService {
    constructor();
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMMyReportedIssuesServiceImpl, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMMyReportedIssuesServiceImpl>;
}

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

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

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

declare class AXMEntityProvider implements AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader {
    private injector;
    preload(): AXPEntityPreloadEntity[];
    get(moduleName: string, entityName: string): Promise<AXPEntity | null>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMEntityProvider, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXMEntityProvider>;
}

declare const AXMLogCaptureService: i0.Type<{
    logs: i0.Signal<AXMLogMessage[]>;
    canCapture: i0.Signal<boolean>;
    canCaptureLog: i0.Signal<boolean>;
    consoleLogs: i0.Signal<AXMLogMessage[]>;
    startCapturingLog: () => void;
    finishCapturingLog: () => void;
    addConsoleLog: (message: string) => void;
    addConsoleError: (message: string) => void;
    addConsoleWarning: (message: string) => void;
} & _ngrx_signals.StateSource<{
    logs: AXMLogMessage[];
    canCapture: boolean;
}>>;

declare class AXMHelpDeskModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXMHelpDeskModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXMHelpDeskModule, never, [typeof i1.AXPWorkflowModule, typeof i2.AXPComponentSlotModule, typeof AXMIssueTypeEntityModule, typeof AXMReportedIssuesEntityModule, typeof AXMMyReportedIssuesEntityModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXMHelpDeskModule>;
}

declare class AXMMenuProvider implements AXPMenuProvider {
    private entityService;
    provide(context: AXPMenuProviderContext): Promise<void>;
}

declare const AXMPermissionsKeys: {
    Issue: {
        Management: string;
        MyReportedIssues: {
            Management: string;
            View: string;
            Edit: string;
            Delete: string;
            Create: string;
        };
        ReportedIssues: {
            Management: string;
            View: string;
            Edit: string;
            Delete: string;
            Create: string;
        };
    };
};

declare class AXMSettingProvider implements AXPSettingDefinitionProvider {
    provide(context: AXPSettingDefinitionProviderContext): Promise<void>;
}

export { AXMEntityProvider, AXMHelpDeskModule, AXMIssueTypeEntityModule, AXMIssueTypeService, AXMIssueTypeServiceImpl, AXMLogCaptureService, AXMMenuProvider, AXMMyReportedIssuesEntityModule, AXMMyReportedIssuesService, AXMMyReportedIssuesServiceImpl, AXMPermissionsKeys, AXMReportedIssuesEntityModule, AXMReportedIssuesService, AXMReportedIssuesServiceImpl, AXMSettingProvider, RootConfig, issueTypeEntityFactory, myReportedIssuesEntityFactory, reportedIssuesEntityFactory };
export type { AXMHelpDeskIssueTypeEntityModel, AXMHelpDeskMyReportedIssuesEntityModel, AXMHelpDeskReportedIssuesEntityModel };
