//important ones
import { ReactElement } from "react"
//columns
export interface Styles {
    backgroundColor: string
    color: string
    fontFamily?: string
}
export interface DisplayPropertiesConditions {
    value: string,
    styles: Styles
}

export interface DisplayProperties {
    displayType: string
    styles: Styles
    conditions: DisplayPropertiesConditions[]
}
export interface Col {
    name: string;
    type: string;
    value: string;
    isPrimary: boolean;
    isForeignKey: boolean;
    hasManyRelationship?: boolean;
    isRequired?: boolean;
    staticDropDown?: StaticDropDown[];
    tableName?: string
    cols?: string[]
    placeholder?: string
    returnColumn?: string
    displayColumns?: string[]
    displayProperties?: DisplayProperties
}

//Table

export enum RecordDisplayType {
    Table,
    Grid
}
export enum AddEditDisplayType {
    Modal,
    Drawer,
    Simple
}
export interface GridCardDisplayType {
    titleCol: string
    bodyCol: string
    noOfCols: number
    imageCol?: string
}
export interface Panel {
    title: string,
    panels: string[]
}
export interface TableType {
    primaryColor: string
    secondaryColor: string
    isModal: boolean
    title?: string
    tablename: string
    colorRow?: string
    bgRow?: string
    fontFamily?: string
    fontSizeRow?: string
    fontSizeHeader?: string
    fontWeightRow?: string
    showAllBorders?: boolean
    showRoundedTitle?: boolean
    showControls?: boolean
    showSearch?: boolean
    showPagination?: boolean
    showBackground?: boolean
    selectableRows?: boolean
    col: Col[]
    panels: Panel[]
    addEditDisplayType: AddEditDisplayType
    recordsDisplayType: RecordDisplayType
    searchByCol: string[]
    gridCardDisplay?: GridCardDisplayType
}
//table form design
export interface inputCardProps {
    title: string;
    onChange: any;
    noOfCols: number;
    inputs: FieldProp[]
}
interface FieldProp {
    label: string;
    spacing: string;
    placeholder: string;
}

//end of important ones

//shared interfaces
export interface Colors {
    primary: string;
    secondary: string;
}

export interface Input {
    value: string;
    placeholder: string
    onChange: any;
}

export interface StaticDropDown {
    value: any;
    label: any;
}

export interface BabbuMenuItems {
    label: string;
    icon: any;
    path: any;
    onClick: any;
}

export interface Offer {
    open: any;
    close: any;
    title: string;
    logo: string;
    offerImage: string;
    productName: string;
    description: string;
    validity: string;
    redeem: any;
}


//message components
export interface MessagingType extends Colors {
    messageTable: string,
    messageCol: Col[],
    userTable: string,
    userCol: Col[]
}

export interface ConversationType extends Colors {
    id: any;
    title: string;
    shortMessage: string;
    selected?: boolean;
    onConvoSelect?: any;
}

export interface CustomSearchType extends Input {
    records: any[];
    filterCols: string[];
}

//layout
export interface GridLayoutType {
    col: number
    gridLayoutComponents: ReactElement<any, any>[]
}