export const filterType = {
  text: 'text',
  number: 'number',
  bool: 'bool',
  select: 'select',
  date: 'date',
  scan: 'scan'
} as const;

export type FilterType = keyof typeof filterType;

export const condition = {
  ro: {
    eq: 'egal cu',
    ne: 'diferit de',
    lt: 'mai mic',
    gt: 'mai mare',
    is: 'este',
    ct: 'contine',
    ns: 'nu este setat',
  },
  en: {
    eq: 'equals',
    ne: 'not equal',
    lt: 'less than',
    gt: 'greater than',
    is: 'is',
    ct: 'contains',
    ns: 'not set',
  }
} as const;

export type ConditionLang = keyof typeof condition;
export type ConditionKey = keyof typeof condition['ro'];

export const getConditionKey = (
  value: string,
  lang: ConditionLang
): ConditionKey | undefined => {
  const enumKey = (Object.keys(condition[lang]) as ConditionKey[]).find(
    (key) => condition[lang][key] === value
  );
  if (enumKey !== undefined) {
    return enumKey;
  }
  return undefined;
};

type FieldOption = {
  id: string
  type: string
  title: string
  value?: boolean | string | number
  placeholder?: string
  options?: {
    id: string
    title: string
  }[],
  default?: boolean | number | string
  description?: string
}

export const fieldOptions: FieldOption[] = [
  {
    id: 'active_field',
    type: 'boolean',
    title: 'Camp activ',
    value: true,
    description: 'Dacă opțiunea este activată, câmpul va fi afișat în formular.'
  },
  {
    id: 'arhiveaza_reper',
    type: 'boolean',
    title: 'Arhiveaza reper',
    description: 'Dacă opțiunea este activată, câmpul va indica dacă reperul va fi arhivat la finalizarea procesului.'
  },
  {
    id: 'table_display',
    type: 'boolean',
    title: 'Afisare in tabel',
    value: false,
    description: 'Dacă opțiunea este activată, câmpul va fi afișat în tabel.'
  },
  {
    id: 'style',
    type: 'textarea',
    title: 'Stil',
    placeholder: 'Introduceti stilul CSS',
    description: 'Stilul CSS al câmpului.'
  },
  {
    id: 'title_size',
    type: 'select',
    title: 'Dimensiune titlu',
    options: [
      {
        id: 'h1',
        title: 'H1',
      },
      {
        id: 'h2',
        title: 'H2',
      },
      {
        id: 'h3',
        title: 'H3',
      },
      {
        id: 'h4',
        title: 'H4',
      },
      {
        id: 'h5',
        title: 'H5',
      },
      {
        id: 'h6',
        title: 'H6',
      },
    ],
    default: 'h1'
  },
  {
    id: 'placeholder',
    type: 'text',
    title: 'Placeholder',
    description: 'Placeholder-ul câmpului.'
  },
  {
    id: 'default_value',
    type: 'text',
    title: 'Valoare implicită',
    description: 'Valoarea implicită a câmpului.'
  },
  {
    id: 'file_size',
    type: 'select',
    title: 'Dimensiune maxima',
    placeholder: 'Introduceti dimensiunea maxima',
    options: [
      { id: '1', title: '1 MB' },
      { id: '2', title: '2 MB' },
      { id: '4', title: '4 MB' },
      { id: '8', title: '8 MB' },
      { id: '16', title: '16 MB' },
      { id: '32', title: '32 MB' },
      { id: '64', title: '64 MB' },
      { id: '128', title: '128 MB' },
      { id: '256', title: '256 MB' },
      { id: '512', title: '512 MB' },
      { id: '1024', title: '1024 MB' },
    ],
    default: '4',
  },
  {
    id: 'file_count',
    type: 'select',
    title: 'Numarul maxim de fisiere',
    placeholder: 'Introduceti numarul maxim de fisiere',
    options: [
      { id: '1', title: '1 fișier' },
      { id: '2', title: '2 fișiere' },
      { id: '3', title: '3 fișiere' },
      { id: '5', title: '5 fișiere' },
      { id: '10', title: '10 fișiere' },
      { id: '20', title: '20 fișiere' },
      { id: '50', title: '50 fișiere' },
    ],
    default: '2'
  },
  {
    id: 'extensions',
    type: 'text',
    title: 'Extensii permise',
    placeholder: 'Ex: .jpg, .png, .pdf'
  },
  
]

export type Field = {
  id: string
  type: string
  title: string
  description?: string
  value?: boolean | string | number
  options?: {
    id: string
    title: string
  }[],
  fieldOptionList?: string[],
  attributes?: {
    key: string
    value: string
  }[],
  children?: Field[],
  icon?: string,
  allowMultiple?: boolean,
  readonly?: boolean,
}

export const fieldList: Field[] = [
  {
    id: 'title',
    type: 'title',
    title: 'Title',
    fieldOptionList: ['active_field', 'table_display', 'style', 'title_size'],
  },
  {
    id: 'paragraph',
    type: 'paragraph',
    title: 'Paragraph',
    fieldOptionList: ['active_field', 'table_display', 'style'],
  },
  {
    id: 'separator',
    type: 'separator',
    title: 'Separator',
    fieldOptionList: ['active_field', 'table_display', 'style'],
  },
  {
    id: 'text',
    type: 'text',
    title: 'Text',
    fieldOptionList: ['active_field', 'table_display', 'style', 'default_value', 'placeholder'],
  },
  {
    id: 'textarea',
    type: 'textarea',
    title: 'Textarea',
    fieldOptionList: ['active_field', 'table_display', 'style', 'default_value', 'placeholder'],
  },
  {
    id: 'attachment',
    type: 'attachment',
    title: 'Attachment',
    fieldOptionList: ['active_field', 'table_display', 'style', 'file_size', 'file_count' , 'extensions'],
  },
  {
    id: 'checkbox',
    type: 'checkbox',
    title: 'Checkbox',
    fieldOptionList: ['active_field', 'table_display', 'style', 'arhiveaza_reper'],
  },
  {
    id: 'single_select',
    type: 'single_select',
    title: 'Single Select',
    fieldOptionList: ['active_field', 'table_display', 'style'],
  },
  {
    id: 'multiple_select',
    type: 'multiple_select',
    title: 'Multiple Select',
    fieldOptionList: ['active_field', 'table_display', 'style'],
  },
  {
    id: 'numeric',
    type: 'numeric',
    title: 'Numeric',
    fieldOptionList: ['active_field', 'table_display', 'style', 'default_value', 'placeholder'],
  },
  {
    id: 'percent',
    type: 'percent',
    title: 'Percent',
    fieldOptionList: ['active_field', 'table_display', 'style', 'default_value', 'placeholder'],
  },
  {
    id: 'date',
    type: 'date',
    title: 'Date',
    fieldOptionList: ['active_field', 'table_display', 'style', 'default_value', 'placeholder'],
  },
  {
    id: 'color',
    type: 'color',
    title: 'Color',
    fieldOptionList: ['active_field', 'table_display', 'style', 'default_value', 'placeholder'],
  },
  {
    id: 'url',
    type: 'url',
    title: 'Url',
    fieldOptionList: ['active_field', 'table_display', 'style', 'default_value', 'placeholder'],
  },
  {
    id: 'password',
    type: 'password',
    title: 'Password',
    fieldOptionList: ['active_field', 'table_display', 'style'],
  },
  {
    id: 'email',
    type: 'email',
    title: 'Email',
    fieldOptionList: ['active_field', 'table_display', 'style', 'default_value', 'placeholder'],
  },
  {
    id: 'to-do',
    type: 'to-do',
    title: 'To-do',
    fieldOptionList: ['active_field', 'table_display', 'style']
  }
]

export const keyValueTableFields: Field[] = [
  {
    id: 'cons',
    title: 'Constructiei',
    type: 'date',
  },
  {
    id: 'ni',
    title: 'Numar inventar',
    type: 'text',
  },
  {
    id: 'ncmf',
    title: 'Numar clasa CF',
    type: 'number',
    readonly: true,
  },
  {
    id: 'insured',
    title: 'Este asigurata',
    type: 'boolean'
  },
  {
    id: 'cfatada',
    title: 'Culoare fatada',
    type: 'color'
  },
  {
    id: 'claterale',
    title: 'Culori laterale',
    type: 'color',
    allowMultiple: true,
  },
  {
    id: 'cposition',
    title: 'Pozitionare',
    type: 'select',
    options: [
      { id: 'left', title: 'Stanga' },
      { id: 'right', title: 'Dreapta' },
    ]
  },
  {
    id: 'suprafatau',
    title: 'Suprafata utila',
    type: 'number',
    attributes: [
      { key: 'suffix', value: 'mp' }
    ],
  },
  {
    id: 'currency',
    title: 'Valoare moneda',
    type: 'number',
    attributes: [
      { key: 'prefix', value: '$' }
    ],
  },
  {
    id: 'nif',
    title: 'Chirie',
    type: 'text',
    children: [
      {
        id: 'rent_type',
        title: 'Componenta',
        type: 'text',
      },
      {
        id: 'rent_proc',
        title: 'Procent',
        type: 'number',
        attributes: [
          { key: 'suffix', value: '%' }
        ],
      },
    ]
  },
  {
    id: 'specf',
    title: 'Specificatii',
    type: 'text',
    children: [
      {
        id: 'spec_type',
        title: 'Tip',
        type: 'text',
      },
      {
        id: 'spec_value',
        title: 'Valoare',
        type: 'number',
      },
    ],
    allowMultiple: true,
  },
]