export interface CrudConfig {
    // Accordion Configuration
    items?: Array<CrudConfigItem>
    multiple?: boolean
    value?: string | number | string[] | number[] | null

    // DataTable Configuration
    columns: Array<CrudConfigColumn>
    data: Array<any>
    meta?: {
        current_page?: number
        last_page?: number
        per_page?: number
        total?: number
    }
    emptyMessage?: string

    hasDateFilter?: boolean
}

interface CrudConfigColumnBase {
    field: string
    header: string
    transform?: (value: any) => any
    bodyClass?: (row: any) => string | string[] | Record<string, boolean>
    sortable?: boolean
}

type CrudConfigColumnText = CrudConfigColumnBase & {
    type?: 'text'
}

type CrudConfigColumnIcon = CrudConfigColumnBase & {
    type: 'icon'
    icon: string
    action: (row: any) => void
    visible?: (row: any) => boolean
}

type CrudConfigColumnLink = CrudConfigColumnBase & {
    type: 'link'
    url: (row: any) => string
    label: (row: any) => string
}

type CrudConfigColumnBadge = CrudConfigColumnBase & {
    type: 'badge'
    severity?: (value: any) => 'success' | 'info' | 'warn' | 'danger' | 'secondary' | 'contrast' | undefined
}

export type CrudConfigColumn = CrudConfigColumnText | CrudConfigColumnIcon | CrudConfigColumnLink | CrudConfigColumnBadge

export interface CrudConfigItem {
    header: string
    content: string
    [key: string]: any
}
