import { MakeRequiredSomeFields } from '@utility-lib/constants';

export type CustomField = 'projects' | 'billToClient' | 'tripPurpose';

const customFieldLabel: Record<CustomField, string> = {
  projects: 'Projects',
  tripPurpose: 'Trip purpose',
  billToClient: 'Bill to client'
};

export type CustomFiledOption = {
  isDefault: boolean;
  label: string;
  value: string;
  isNew: boolean;
};

export type CompanyCustomFields = Map<CustomField, CustomFiledOption[]>;

export class CustomFieldsUtility {
  static initCustomFieldOption(
    option: MakeRequiredSomeFields<CustomFiledOption, 'label'>
  ): CustomFiledOption {
    return {
      label: option.label,
      value: option.value || option.label.toUpperCase(),
      isDefault: option.isDefault ?? false,
      isNew: option.isNew ?? true
    };
  }

  static generateCompanyTripPurposeData(
    customField: CustomField,
    options: CustomFiledOption[]
  ) {
    return {
      name: customField,
      label: customFieldLabel[customField],
      type: 'SELECT',
      required: true,
      defaultVal: '',
      _isCustom: false,
      options: options,
      allowFreeText: false
    };
  }

  static initCompanyCustomFieldsForTripPurpose(): CompanyCustomFields {
    const companyCustomFields: CompanyCustomFields = new Map();
    companyCustomFields.set('tripPurpose', [
      CustomFieldsUtility.initCustomFieldOption({
        label: 'Custom Trip purpose',
        value: 'CUSTOM_TRIP_PURPOSE',
        isDefault: true
      })
    ]);
    return companyCustomFields;
  }
}
