import { FieldValues, RegisterOptions } from 'react-hook-form';

export const createFormOptions = <T extends FieldValues>(overrides?: Partial<Record<string, RegisterOptions<T>>>) => {
  const defaultOptions: Partial<Record<string, RegisterOptions<T>>> = {
    NAME: {
      required: '이름을 입력해 주세요.',
      pattern: { value: /^[가-힣]{2,}$/, message: '이름을 두 글자 이상 입력해 주세요.' },
    },
    BIRTH: {
      minLength: { value: 8, message: '생년월일을 8자리로 입력해 주세요.' },
      pattern: {
        value: /^\d{4}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])$/,
        message: '생년월일 형식에 맞게 입력해 주세요.',
      },
      validate: {
        isBeforeToday: (value: string | null | undefined) => {
          if (!value) return '생년월일을 입력해 주세요.';
          const birthDate = new Date(
            Number(value.slice(0, 4)),
            Number(value.slice(4, 6)) - 1,
            Number(value.slice(6, 8)),
          );
          const today = new Date();
          today.setHours(0, 0, 0, 0);
          return birthDate < today || '오늘 이전 날짜로 입력해 주세요.';
        },
      },
      required: '생년월일을 입력해 주세요.',
    },
    CARRIER: {
      required: '',
    },
    PHONE: {
      required: '휴대폰 번호를 입력해 주세요.',
      pattern: { value: /^01[016789][0-9]{7,8}$/, message: '올바르지 않은 휴대폰 형식입니다.' },
    },
    BANK_ACCOUNT: {
      required: '계좌번호를 입력해 주세요.',
      pattern: { value: /^[0-9]+$/, message: '숫자만 입력 가능합니다.' },
    },
    BANK_CODE: {
      required: '은행을 선택해 주세요.',
    },
    ALIAS_NM: {
      required: true,
      pattern: { value: /^[0-9]+$/, message: '숫자만 입력 가능합니다.' },
    },
  };
  return {
    ...defaultOptions,
    ...overrides,
  };
};

export const MAX_INPUT_NUMBER = 999999999999999;
