import type { KviewDropdownOption } from '@kview/ui-core/vue';

export type SettingsTabId = 'user'
    | 'preferences'
    | 'workspace'
    | 'integrations'
    | 'system'
    | 'admin';

export interface SettingsTab {
    id: SettingsTabId;
    label: string;
    icon: string;
    group: string;
}

export interface SettingsDefinitionItem {
    label: string;
    value: string;
}

export interface SettingsDynamicField {
    id: string;
    model: string;
    modelLabel: string;
    displayName: string;
    fieldName: string;
    fieldType: string;
    inputType: string | null;
    order: number | null;
    description: string | null;
    validation: string | null;
    dropdownValue: string | null;
    readOnly: boolean;
    updateUrl: string;
    deleteUrl: string;
}

export interface SettingsPayload {
    activeTab: SettingsTabId;
    tabs: SettingsTab[];
    returnUrl: string;
    dataUrl: string;
    account: {
        name: string;
        email: string;
        avatarUrl: string | null;
        hasAvatar: boolean;
        profileUrl: string;
        passwordUrl: string;
    };
    preferences: {
        updateUrl: string;
        values: {
            targetCurrency: string;
            itemsPerPage: string;
            amountScaling: string;
            decimalSeparator: string;
            dateFormatView: string;
            dateFormatList: string;
        };
        options: {
            targetCurrencies: KviewDropdownOption[];
            itemsPerPage: KviewDropdownOption[];
            amountScalings: KviewDropdownOption[];
            decimalSeparators: KviewDropdownOption[];
            dateFormats: KviewDropdownOption[];
        };
    };
    workspace: {
        label: string;
        signedInAs: string;
    };
    integrations: {
        excelTokenUrl: string;
    };
    system: {
        application: SettingsDefinitionItem[];
        database: SettingsDefinitionItem[];
    };
    admin?: {
        links: {
            currencies: string;
            capitalAccounts: string;
            dropdowns: string;
        };
        storeUrl: string;
        fields: SettingsDynamicField[];
        selectedField: SettingsDynamicField | null;
        options: {
            models: KviewDropdownOption[];
            fieldTypes: KviewDropdownOption[];
            inputTypes: KviewDropdownOption[];
        };
    };
}

export type SettingsValidationErrors = Record<string, string[]>;

export interface SettingsMutationResponse {
    redirect: string;
    message: string;
}
