import { Document, Types } from 'mongoose';
import { IPaginateModel } from '@/shared/interfaces/model.interface';
import { AuditFields } from '@/shared/types/common';
import { CustomFieldTypes, CustomFormNames } from '@/modules/customFields/customFields.constant';

// Option structure for dropdown, radio, checkbox
export interface ICustomFieldsOption {
  label: string;
  value: string;
  isDeleted?: boolean;
}

export interface ICustomFieldsBase {
  companyId: Types.ObjectId;
  label: string;
  key: string;
  type: CustomFieldTypes;
  formName: CustomFormNames;
  section?: string;
  placeholder?: string;
  required?: boolean;
  /** When true and type is number, document placeholders convert value from company default UOM to sq.m */
  isUOM?: boolean;
  sequence?: number;
  isDeleted?: boolean;
  options?: ICustomFieldsOption[];
}

export interface ICustomFields extends ICustomFieldsBase, AuditFields {}

export interface ICustomFieldsDoc extends ICustomFields, Document {}

export interface ICustomFieldsOptionDoc extends ICustomFieldsOption, Document {}

export interface ICustomFieldsModel extends IPaginateModel<ICustomFieldsDoc> {
  isCustomFieldsNameTaken(name: string): Promise<boolean>;
}

export type NewCreatedCustomFields = ICustomFieldsBase &
  Partial<Pick<AuditFields, 'createdBy' | 'updatedBy'>>;

export type UpdateCustomFieldsBody = Partial<ICustomFields>;
