import type {
    KviewDetailTableColumn,
    KviewDetailTableRow,
} from '@kview/ui-data/vue';
import type {
    AliasRow,
    DynamicRecordField,
    DynamicRecordFormSchema,
    RecordDeleteConfirmation,
    RecordDisplayField,
    RecordLink,
    RecordMetric,
    RecordSummaryDetail,
} from '@/types/records';

export interface BusinessMetric extends RecordMetric {
    icon?: string | null;
    variant?: 'default' | 'metric';
}

export interface BusinessRecordSection {
    id: string;
    title: string;
    icon?: string | null;
    fields: RecordDisplayField[];
}

export interface BusinessRecordTab {
    id: string;
    label: string;
    icon?: string | null;
    badge?: string | number | null;
}

export interface BusinessEmptyStatePayload {
    title: string;
    text: string;
    icon?: string | null;
}

export interface BusinessRecordGroupView extends BusinessRecordTab {
    description?: string | null;
    metrics?: BusinessMetric[];
    sections?: BusinessRecordSection[];
    table?: BusinessDetailTablePayload | null;
    empty?: BusinessEmptyStatePayload | null;
}

export interface BusinessRecordGroup {
    title: string;
    description?: string | null;
    label: string;
    views: BusinessRecordGroupView[];
}

export interface BusinessRecordSummary {
    eyebrow?: string | null;
    title: string;
    subtitle?: string | null;
    icon?: string | null;
    metrics: RecordMetric[];
    details: RecordSummaryDetail[];
    aliases?: AliasRow[];
}

export interface BusinessDetailTablePayload {
    id: string;
    title?: string | null;
    description?: string | null;
    total?: number;
    truncated?: boolean;
    addLink?: (RecordLink & { label: string }) | null;
    metrics?: BusinessMetric[];
    columns: KviewDetailTableColumn[];
    rows: KviewDetailTableRow[];
    emptyText?: string;
    minWidth?: string;
}

export interface FinancialRecordPayload {
    kind: string;
    title: string;
    subtitle?: string | null;
    icon?: string | null;
    metrics: BusinessMetric[];
    summary: BusinessRecordSummary;
    sections: BusinessRecordSection[];
    tabs?: BusinessRecordTab[];
    tables?: Record<string, BusinessDetailTablePayload>;
}

export interface PortfolioRecordPayload {
    kind: 'fund' | 'gp' | 'investor';
    title: string;
    subtitle?: string | null;
    icon?: string | null;
    primaryAction?: BusinessHeaderAction | null;
    summary: BusinessRecordSummary;
    information: RecordDisplayField[];
    tabs: BusinessRecordTab[];
    tables: Record<string, BusinessDetailTablePayload>;
    groups?: Record<string, BusinessRecordGroup>;
}

export interface BusinessBackLink extends RecordLink {
    label: string;
}

export interface BusinessDestroyAction {
    href: string;
    confirm: RecordDeleteConfirmation;
}

export interface BusinessHeaderAction extends RecordLink {
    label: string;
    icon?: string | null;
}

export interface BusinessFormSection {
    id: string;
    title: string;
    description?: string | null;
    fields: DynamicRecordField[];
}

export interface BusinessFormSchemaPayload {
    sections: BusinessFormSection[];
    schema: DynamicRecordFormSchema;
    aliases?: AliasRow[];
}

export interface BusinessFormPagePayload {
    mode: 'create' | 'edit';
    title: string;
    description?: string | null;
    icon?: string | null;
    schema: BusinessFormSchemaPayload;
    action: string;
    method: 'post' | 'put' | 'patch';
    submitLabel: string;
    cancelLink: RecordLink;
    destroyAction?: BusinessDestroyAction | null;
}
