import { TccET_APPLI } from './applications.model';
import { IExpandable, TccClarcDate, TccCompanyAddress, TccAddress, TccTranslation, TccSimpleHistory, TccCreditCard, TccDictionary, TccTrustedDomain, TccTypedValue, TccDictionaryItem, TccSystemClass, TccC4Node } from './shared.model';
export declare namespace TccET_IAM {
    export enum SystemClassShort {
        CCI_SYSTEM_CLASS_SHORT_EXTERNAL = "ext",
        CCI_SYSTEM_CLASS_SHORT_CORE = "cor",
        CCI_SYSTEM_CLASS_SHORT_PRODUCTIVE = "prd",
        CCI_SYSTEM_CLASS_SHORT_TEST = "tst",
        CCI_SYSTEM_CLASS_SHORT_DEVELOPMENT = "dev",
        CCI_SYSTEM_CLASS_SHORT_TRAINING = "trn",
        CCI_SYSTEM_CLASS_SHORT_SANDBOX = "snd"
    }
    export enum StorageClass {
        ccSC_Unknown = "ccSC_Unknown",
        ccSC_Dynamic = "ccSC_Dynamic",
        ccSC_Archive = "ccSC_Archive",
        ccSC_Public = "ccSC_Public"
    }
    export interface SessionHistory extends IExpandable {
        Ips?: Array<string>;
        Date: TccClarcDate;
        Count: number;
    }
    export interface DisplayName extends TccTranslation {
    }
    export interface Description extends TccTranslation {
    }
    export interface Phone extends IExpandable {
        Administration?: string;
        Verification?: string;
    }
    export interface Email extends IExpandable {
        Registration?: string;
        Administration?: string;
        Information?: string;
        Invoice?: string;
        Common?: string;
        Backup?: string;
    }
    export type UserInfos = Array<UserInfo>;
    export enum UserClass {
        ccUC_Common = "ccUC_Common",
        ccUC_System = "ccUC_System"
    }
    export enum UserState {
        ccUS_Unknown = "ccUS_Unknown",
        ccUS_Available = "ccUS_Available",
        ccUS_Busy = "ccUS_Busy",
        ccUS_DoNotDisturb = "ccUS_DoNotDisturb",
        ccUS_Away = "ccUS_Away",
        ccUS_BeRightBack = "ccUS_BeRightBack",
        ccUS_AppearOffline = "ccUS_AppearOffline",
        ccUS_OutOfOffice = "ccUS_OutOfOffice"
    }
    interface Organization extends IExpandable {
        JobTitle?: string;
        Office?: string;
        Department?: string;
        Company?: string;
        PersonnelNumber?: string;
        Website?: string;
    }
    interface UserContacts extends IExpandable {
        Private?: UserContact;
        Business: UserContact;
    }
    interface UserContact extends IExpandable {
        LandlinePhone?: string;
        MobilePhone?: string;
        Email?: string;
    }
    export interface Condition extends IExpandable {
        Locked: boolean;
        State: UserState;
        Online: boolean;
        LockReason: string;
    }
    export interface UserInfo extends TccC4Node {
        PasswordSalt?: string;
        BossOf?: TccDictionary<string, GroupMemberClass>;
        PasswordHash?: string;
        Organization?: Organization;
        PrivateKey?: string;
        Address?: TccAddress;
        Properties?: TccDictionary<string, TccTypedValue>;
        Condition?: Condition;
        Language?: string;
        Locale?: string;
        UserClass: UserClass;
        Expires?: TccClarcDate;
        Contacts?: UserContacts;
        FailedLogins?: SessionHistory;
    }
    export enum Priority {
        ccPR_Idle = "ccPR_Idle",
        ccPR_Lowest = "ccPR_Lowest",
        ccPR_Lower = "ccPR_Lower",
        ccPR_Normal = "ccPR_Normal",
        ccPR_Higher = "ccPR_Higher",
        ccPR_Highest = "ccPR_Highest",
        ccPR_TimeCritical = "ccPR_TimeCritical"
    }
    export enum PaymentMethod {
        ccPM_Invoice = "ccPM_Invoice",
        ccPM_CreditCard = "ccPM_CreditCard"
    }
    export enum FunctionalRights {
        ccTR_ExportTransport = "ccTR_ExportTransport",
        ccTR_ImportTransport = "ccTR_ImportTransport"
    }
    export enum Module {
        ccLM_ClarcInfinity = "ccLM_ClarcInfinity",
        ccLM_CaptureOperator = "ccLM_CaptureOperator",
        ccLM_ScanOperator = "ccLM_ScanOperator",
        ccLM_ProductiveSystem = "ccLM_ProductiveSystem",
        ccLM_TestSystem = "ccLM_TestSystem",
        ccLM_DevelopmentSystem = "ccLM_DevelopmentSystem",
        ccLM_TrainingSystem = "ccLM_TrainingSystem",
        ccLM_SandboxSystem = "ccLM_SandboxSystem",
        ccLM_InvoiceSolution = "ccLM_InvoiceSolution",// Invoice solution
        ccLM_OrderSolution = "ccLM_OrderSolution",// Order solution
        ccLM_ConfirmationSolution = "ccLM_ConfirmationSolution",// Confirmation solution
        ccLM_BillingSolution = "ccLM_BillingSolution",// Billing solution
        ccLM_ArchiveSolution = "ccLM_ArchiveSolution",// Archive solution
        ccLM_InboundSolutionsDocs = "ccLM_InboundSolutionsDocs",
        ccLM_OutboundSolutionsDocs = "ccLM_OutboundSolutionsDocs",
        ccLM_CaptureDocuments = "ccLM_CaptureDocuments",
        ccLM_CaptureOperatorPro = "ccLM_CaptureOperatorPro"
    }
    interface Payment extends IExpandable {
        PaymentMethod?: PaymentMethod;
        CreditCard?: TccCreditCard;
    }
    export interface LicenseModuleItem {
        Module: Module;
        Validity: TccClarcDate;
        Amount: number;
    }
    export interface InfinityLicense {
        Tenant: string;
        Modules: LicenseModuleItem[];
        Number: string;
        Key: string;
        Licensee: string;
    }
    export interface TenantContact extends IExpandable {
        Phone: Phone;
        Email: Email;
    }
    export interface Registration extends IExpandable {
        Active?: boolean;
        Date?: TccClarcDate;
        Phone?: string;
        Email?: string;
        ForeName?: string;
        SurName?: string;
        CreditCard?: TccCreditCard;
    }
    export interface TccMicrosoft {
        Azure: Azure;
    }
    export interface Azure {
        TenantId: string;
    }
    export interface TenantInfo extends TccC4Node {
        Priority: Priority;
        Registration?: Registration;
        License: InfinityLicense;
        Payment: Payment;
        Address?: TccCompanyAddress;
        Domains: TccTrustedDomain[];
        Language?: string;
        Languages?: string[];
        Contact: TenantContact;
        FunctionalRights: FunctionalRights[];
        Microsoft?: TccMicrosoft;
        SystemClasses: TccSystemClass[];
    }
    export enum VerificationType {
        ccVT_Unknown = "ccVT_Unknown",
        ccVT_AzureAd = "ccVT_AzureAd"
    }
    interface baseCredentials {
        Tenant?: string;
        SystemClass?: TccSystemClass;
    }
    export interface PasswordCredentials extends baseCredentials {
        UserName: string;
        Password: string;
        Language?: string;
        Code?: string;
        FingerPrint?: string;
    }
    interface VerificationToken {
        Data: any;
        Type: VerificationType;
    }
    export interface TokenCredentials extends baseCredentials {
        Token: VerificationToken;
    }
    export type Credentials = PasswordCredentials | TokenCredentials;
    export interface UserResponse {
        CustomSettings: Object;
        Name: string;
        Email: string;
        ForeName: string;
        SurName: string;
        Id: string;
        Icon: IconResponse;
        Properties: TccDictionary<string, TccTypedValue>;
        Roles: Array<UserRoles>;
        Locale: string;
    }
    interface IconLinks {
        Image: string;
        Thumbnail: string;
    }
    export interface IconResponse {
        Color: string;
        Id: string;
        Links: IconLinks;
    }
    export interface TenantResponse {
        DisplayName: string;
        Id: string;
        Name: string;
        LicenseNumber: string;
        LicenseModules: Module[];
        Rights: FunctionalRights[];
        Priority: Priority;
        Language: string;
        Languages: string[];
    }
    export interface SessionResponse {
        Expires: TccClarcDate;
        FailedLogins: SessionHistory;
        Language: string;
        Token: string;
        TokenType: string;
        Information: string;
    }
    export interface SystemResponse {
        Id: string;
        ClassType: TccSystemClass;
        ChangeLock: boolean;
        ChangeRecording: boolean;
        ChangeHistory: boolean;
        /**
         * created entities have to be added to a transport on creation
         */
        ForceAddChangesToTransports: boolean;
        Ai: {
            AskClara?: {
                Reasoning?: boolean;
            };
        };
    }
    export interface VersionResponse {
        Build: string;
        Info: string;
    }
    export interface LoginResponse extends IExpandable {
        Session: SessionResponse;
        Tenant: TenantResponse;
        System: SystemResponse;
        User: UserResponse;
        Version: VersionResponse;
    }
    export interface LogoutResponse extends IExpandable {
        Result: boolean;
    }
    export enum MembershipRelation {
        ccMR_Direct = "ccMR_Direct",
        ccMR_Inherited = "ccMR_Inherited"
    }
    export interface GetMembershipsResponse extends IExpandable {
        Items: Array<Membership>;
    }
    export interface Membership extends IExpandable {
        Id: string;
        Name: string;
        Relation: MembershipRelation;
    }
    export type UserGroupInfos = Array<UserGroupInfo>;
    export enum GroupClass {
        ccGC_System = "ccGC_System",
        ccGC_Common = "ccGC_Common",
        ccGC_Team = "ccGC_Team"
    }
    export enum UserRoles {
        ccUR_Master = "ccUR_Master",
        ccUR_Admin = "ccUR_Admin",
        ccUR_Service = "ccUR_Service",
        ccUR_Everyone = "ccUR_Everyone",
        ccUR_ScanManager = "ccUR_ScanManager",
        ccUR_ScanOperator = "ccUR_ScanOperator",
        ccUR_CaptureManager = "ccUR_CaptureManager",
        ccUR_CaptureOperator = "ccUR_CaptureOperator",
        ccUR_TrainingOperator = "ccUR_TrainingOperator",
        ccUR_TrainingManager = "ccUR_TrainingManager",
        ccUR_Developer = "ccUR_Developer",
        ccUR_BillingSpecialist = "ccUR_BillingSpecialist",
        ccUR_MdMProduct = "ccUR_MdMProduct",
        ccUR_MdmVendor = "ccUR_MdmVendor",
        ccUR_MdmCustomer = "ccUR_MdmCustomer"
    }
    export enum GroupMemberClass {
        ccMC_User = "ccMC_User",
        ccMC_Group = "ccMC_Group"
    }
    export type GroupMembers = TccDictionary<string, GroupMemberClass>;
    export type GroupMember = TccDictionaryItem<string, GroupMemberClass>;
    export interface UserGroupInfo extends TccC4Node {
        GroupClass: GroupClass;
        Roles?: Array<UserRoles>;
        Properties?: TccDictionary<string, TccTypedValue>;
        Members: GroupMembers;
    }
    /**
     * Settings of the Ask Clara assistant
     */
    export interface TccAskClara {
        /**
         * Enables the reasoning mode of the Ask Clara assistant
         * @default false
         */
        Reasoning: boolean;
    }
    /**
     * AI settings of a tenant system
     */
    export interface TccTenantSystemAi {
        AskClara: TccAskClara;
    }
    export interface SystemInfo extends TccC4Node {
        SystemClass: TccSystemClass;
        /**
         * most nodes are locked; iam paths can still be created/deleted/changed; bpi paths can still be changed;
         */
        ChangeLock: boolean;
        /**
         * created entities have to be added to a transport on creation
         */
        ForceAddChangesToTransports: boolean;
        TransportTargets: TccSystemClass[];
        ChangeRecording: boolean;
        TransportSources: TccSystemClass[];
        ChangeHistory?: boolean;
        CloudConnectors?: any[];
        DatabaseName?: string;
        Ai?: TccTenantSystemAi;
    }
    export interface ClientCredentials {
        Id: string;
        ClientId: string;
        CheckHash: string;
        History: TccSimpleHistory;
        TenantId: string;
        Name: string;
        Secrets: ClientSecrets;
        Validity: TccClarcDate;
    }
    export type ClientSecrets = ClientSecret[];
    export interface TccDocumentHubItemProcessManager {
        Type: TccET_APPLI.ProcessManager;
        Id: string;
        /**
         * if a mail notification should be send
         * @default true  (Invoice, Order etc. environment false)
         */
        Notify: boolean;
    }
    export interface ClientSecret {
        Id: string;
        Version?: number;
        Snippet?: string;
        Validity: TccClarcDate;
        SystemClass?: TccSystemClass;
        Ips: string[];
        History?: TccSimpleHistory;
        SystemActorId?: string;
        ProcessTask?: TccDocumentHubItemProcessManager;
    }
    export {};
}
