import {
  ruleLengthValue,
  ruleEmailValue,
  ruleMaxLength,
  ruleNotValue,
  ruleDateValue,
  ruleOptionalFields,
} from "@/shared/utils/rulesInputs";

export const baseDataForm = [
  {
    dataLabel: "Личные данные",
    dataKey: "personalData",
    fields: [
      {
        key: "last_name",
        label: "Фамилия",
        type: "text",
      },
      {
        key: "first_name",
        label: "Имя",
        type: "text",
      },
      {
        key: "patronymic",
        label: "Отчество",
        type: "text",
      },
      {
        key: "gender",
        label: "Пол",
        type: "select",
      },
      {
        key: "birth_date",
        label: "Дата рождения",
        type: "date",
      },
      {
        key: "photo",
        label: "Фото",
        type: "avatar",
      },
    ],
  },
  {
    dataLabel: "Адрес регистрации",
    dataKey: "registrationAddress",
    fields: [
      {
        key: "region",
        label: "Регион",
        type: "text",
      },
      {
        key: "city",
        label: "Город",
        type: "text",
      },
      {
        key: "street",
        label: "Улица",
        type: "text",
      },
      {
        key: "house_number",
        label: "Дом",
        type: "text",
        rules: [(val) => !/^[\W0]/.test(val)],
        error:
          "Номер дома должен начинатся не с нуля и только с цифробуквенного символа",
      },
      {
        key: "apartment_number",
        label: "Квартира",
        type: "text",
        rules: [(val) => !/^[\W0]/.test(val)],
        error:
          "Номер квартиры должен начинатся не с нуля и только с цифробуквенного символа",
      },
    ],
  },
  {
    dataLabel: "Адрес проживания",
    dataKey: "residenceAddress",
    fields: [
      {
        key: "region",
        label: "Регион",
        type: "text",
      },
      {
        key: "city",
        label: "Город",
        type: "text",
      },
      {
        key: "street",
        label: "Улица",
        type: "text",
      },
      {
        key: "house_number",
        label: "Дом",
        type: "text",
        rules: [(val) => !/^[\W0]/.test(val)],
        error:
          "Номер дома должен начинатся не с нуля и только с цифробуквенного символа",
      },
      {
        key: "apartment_number",
        label: "Квартира",
        type: "text",
        rules: [(val) => !/^[\W0]/.test(val)],
        error:
          "Номер квартиры должен начинатся не с нуля и только с цифробуквенного символа",
      },
    ],
  },
];

export const errorMap = {
  house_number: {
    title: "Дом",
    error:
      "Номер дома должен начинатся не с нуля и только с цифробуквенного символа",
  },
  apartment_number: {
    title: "Квартира",
    error:
      "Номер квартиры должен начинатся не с нуля и только с цифробуквенного символа",
  },
};

export const mapNetworks = {
  VK: {
    id: "VK",
    title: "VK",
    icon: "app:icon-vk",
    network: "VK",
  },
  TELEGRAM: {
    id: "TELEGRAM",
    title: "Telegram",
    icon: "app:icon-tg",
    network: "TELEGRAM",
  },
  GMAIL: {
    id: "GMAIL",
    title: "Gmail",
    icon: "app:icon-google",
    network: "GMAIL",
  },
  SLACK: {
    id: "SLACK",
    title: "Slack",
    icon: "app:icon-slack",
    network: "SLACK",
    markerLink: "slack",
  },
  DISCORD: {
    id: "DISCORD",
    title: "Discord",
    icon: "app:icon-discord",
    network: "DISCORD",
  },
  VIBER: {
    id: "VIBER",
    title: "Viber",
    icon: "wifi_calling_3",
    network: "VIBER",
  },
  WHATS_APP: {
    id: "WHATS_APP",
    title: "WhatsApp",
    icon: "call",
    network: "WHATS_APP",
  },
};

export const contactsDataForm = {
  phones: {
    title: "Телефон",
    fieldName: "Телефон",
    error:
      "Не корректно введен номер телефона. Номер телефона должен состоять из 10 цифр (без учета +7)",
    kind: "PHONE",
    rules: [(val) => ruleLengthValue(val, 18)],
    inputMask: "+7 (###) ###-##-##",
  },
  emails: {
    title: "Почта",
    fieldName: "Email",
    error:
      "Не корректно введен адрес почты. Почта должна содержать локальное имя, знак @ и имя домена",
    rules: [(val) => ruleEmailValue(val)],
    kind: "EMAIL",
  },
  networks: {
    title: "Социальные сети",
    fieldName: "Соцсеть",
    error: "Отсутсвует ссылка соцсети",
    rules: [(val) => ruleNotValue(val)],
    kind: "TELEGRAM",
  },
};

export const allergiesConfig = {
  name: {
    title: "Аллерген",
    rules: [(val) => ruleMaxLength(val, 100)],
    error:
      "Некорректно введен аллерген. Значение должно быть больше 1 и меньше 50 символов",
  },
  title: {
    title: "Проявление аллергии",
    rules: [(val) => ruleMaxLength(val, 100)],
    error:
      "Некорректно введено проявление аллергии. Значение должно быть больше 1 и меньше 100 символов",
  },
};

export const confidantConfig = [
  {
    dataLabel: "Общая информация",
    fields: [
      {
        key: "last_name",
        label: "Фамилия",
        error: "Поля с ФИО должны быть заполнены",
        rules: [(val) => ruleNotValue(val)],
      },
      {
        key: "first_name",
        label: "Имя",
        error: "Поля с ФИО должны быть заполнены",
        rules: [(val) => ruleNotValue(val)],
      },
      {
        key: "patronymic",
        label: "Отчество",
        error: "Поля с ФИО должны быть заполнены",
        rules: [(val) => ruleNotValue(val)],
      },
    ],
  },
  {
    dataLabel: "Контакты",
    fields: [
      {
        key: "phone",
        label: "Телефон",
        mask: "+7 (###) ###-##-##",
        error:
          "Не корректно введен номер телефона. Номер телефона должен состоять из 10 цифр (без учета +7)",
        rules: [(val) => ruleLengthValue(val, 18)],
      },
      {
        key: "email",
        label: "Почта",
        error:
          "Не корректно введен адрес почты. Почта должна содержать локальное имя, знак @ и имя домена",
        rules: [(val) => ruleEmailValue(val)],
      },
      {
        key: "networks",
        label: "Соцсеть",
        rules: [(val) => ruleNotValue(val)],
      },
    ],
  },
  {
    dataLabel: "Дополнения",
    fields: [
      {
        key: "note",
        label: "Информация",
        type: "textarea",
        autogrow: true,
        placeholder: "Нет информации",
      },
    ],
  },
];

export const genderOptions = [
  {
    id: "MALE",
    label: "Мужской",
  },
  {
    id: "WOMEN",
    label: "Женский",
  },
];

export const headerMenuItem = [
  {
    title: "Общая информация",
    id: "basic",
    component: "MedicalBaseInfo",
  },
  {
    title: "Журнал посещений",
    id: "session-log",
    component: "SessionLog",
  },
  {
    title: "Планы лечения",
    id: "treatment-plans",
    component: "TreatmentPlans",
  },
  {
    title: "Статистика",
    id: "statistics",
    component: "Statistics",
  },
  {
    title: "История контактов",
    id: "contact-history",
    component: "ContactHistory",
  },
];

export const baseInfoMenu = [
  {
    title: "Основные данные",
    id: "basic-data",
    component: "MedicalBasicDataWrapper",
  },
  {
    title: "Протоколы первичного осмотра",
    id: "protocols",
    component: "MedicalProtocolsWrapper",
  },
  {
    title: "Доверенное лицо",
    id: "confidant",
    component: "MedicalConfidantWrapper",
  },
  {
    title: "Аллергии",
    id: "allergies",
    component: "MedicalAllergiesWrapper",
  },
  {
    title: "Состояние здоровья",
    id: "health-status",
    component: "HealthStatus",
  },
  {
    title: "История болезней",
    id: "medical-history",
    component: "MedicalHistory",
  },
  {
    title: "Зубная формула",
    id: "dental-formula",
    component: "DentalFormula",
  },
];

export const baseInsuranceForm = [
  {
    insuranceLabel: "ОМС",
    insuranceKey: "insuranceOMS",
    fields: [
      {
        key: "series",
        label: "Серия",
        type: "text",
        inputMask: "####",
      },
      {
        key: "number",
        label: "Номер",
        type: "text",
        inputMask: "####-####-####",
      },
      {
        key: "photo",
        label: "Фото ОМС",
        type: "avatar",
      },
    ],
  },
  {
    insuranceLabel: "ДМС",
    insuranceKey: "insuranceDMS",
    fields: [
      {
        key: "series",
        label: "Серия",
        type: "text",
        inputMask: "####",
      },
      {
        key: "number",
        label: "Номер",
        type: "text",
        inputMask: "####-####-####",
      },
      {
        key: "photo",
        label: "Фото ДМС",
        type: "avatar",
      },
    ],
  },
  {
    insuranceLabel: "Категория льготы",
    insuranceKey: "benefit",
    discount: "discount",
    fields: [
      {
        key: "name",
        label: "Категория",
        type: "select",
      },
      {
        key: "photo",
        label: "Документы",
        type: "avatar",
      },
    ],
  },
];
export const routesDictionary = {
  "/clients": "Клиенты",
  "/calendar": "Календарь",
  "/medical-card": "Медкарта",
};

export const documentForm = [
  {
    dataLabel: "Паспорт",
    dataKey: "passport",
    fields: [
      {
        key: "series",
        label: "Серия",
        type: "text",
        inputMask: "####",
        errorMessage: {
          title: "Ошибка валидации",
          message: "Серия паспорта менее 4 цифр или не заполнена",
        },
        rules: (val) => ruleLengthValue(val, 4),
      },
      {
        key: "number",
        label: "Номер",
        type: "text",
        inputMask: "######",
        errorMessage: {
          title: "Ошибка валидации",
          message: "Номер паспорта менее 6 цифр или не заполнен",
        },
        rules: (val) => ruleLengthValue(val, 6),
      },
      {
        key: "issued_by_org",
        label: "Кем выдан",
        type: "text",
        errorMessage: {
          title: "Ошибка валидации",
          message: "Поле 'Кем выдан' не заполнено",
        },
        rules: (val) => ruleNotValue(val),
      },
      {
        key: "issued_by_org_code",
        label: "Код подраздел.",
        type: "text",
        inputMask: "###-###",
        errorMessage: {
          title: "Ошибка валидации",
          message: "Код подразделения менее 6 цифр или не заполнен",
        },
        rules: (val) => ruleLengthValue(val, 7),
      },
      {
        key: "issued_by_date",
        label: "Дата выдачи",
        type: "date",
        rules: (val) => ruleDateValue(val),
        errorMessage: {
          title: "Ошибка валидации",
          message: "Дата выдачи паспорта позднее текущего дня или не заполнена",
        },
      },
      {
        key: "photo",
        label: "Фото паспорта",
        type: "photo",
      },
    ],
  },
  {
    dataLabel: "СНИЛС",
    dataKey: "insurance_number",
    fields: [
      {
        key: "insurance_number",
        label: "Номер СНИЛС",
        type: "text",
        inputMask: "###-###-### ##",
        errorMessage: {
          title: "Ошибка валидации",
          message: "СНИЛС содержит менее 11 цифр",
        },
        rules: (val) => ruleOptionalFields(val, 14),
      },
      {
        key: "photo_insurance_number",
        label: "Фото СНИЛС",
        type: "photo",
      },
    ],
  },
  {
    dataLabel: "ИНН",
    dataKey: "tax_identification_number",
    fields: [
      {
        key: "tax_identification_number",
        label: "Номер ИНН",
        type: "text",
        inputMask: "############",
        errorMessage: {
          title: "Ошибка валидации",
          message: "ИНН содержит менее 12 цифр",
        },
        rules: (val) => ruleOptionalFields(val, 12),
      },
      {
        key: "photo_tax_identification_number",
        label: "Фото ИНН",
        type: "photo",
      },
    ],
  },
];
