import { ElementsNames } from 'client/Containers/Calculation/types/elements';
import { ValidationCondition } from 'core/validation/validate';

export const requiredFields: ElementsNames[] = [
  'selectBrand',
  'selectModel',
  'cbxLeaseObjectUsed',
  'tbxLeaseObjectYear',
  'tbxLeaseObjectMotorPower',
  'tbxLeasingPeriod',
  'tbxLeaseObjectPrice',
  'tbxSupplierDiscountRub',
  'tbxInsFranchise',
  'selectLeaseObjectUseFor',
  'tbxINNForCalc',
  'radioInfuranceOPF',
];

export const conditions: Partial<Record<ElementsNames, ValidationCondition>> = {
  selectLeaseObjectType: calculationStore => {
    const leaseObjectType = calculationStore.getOption('selectLeaseObjectType');
    // Проверяем на мотоцикл
    if (leaseObjectType?.evo_id && ['11'].includes(leaseObjectType?.evo_id)) {
      return {
        isValid: false,
        message: `По данному Типу предмета лизинга возможен только индивидуальный запрос тарифов КАСКО и ОСАГО. Просьба обратиться на адрес strakhovka@evoleasing.ru`,
      };
    }

    if (
      leaseObjectType?.evo_id &&
      !['1', '2', '3', '6', '7', '8', '9', '10'].includes(
        leaseObjectType?.evo_id,
      )
    ) {
      return {
        isValid: false,
        message: `Для выбранной категории ТС расчет в ЭЛТ недоступен`,
      };
    }
    return {
      isValid: true,
    };
  },
  selectLeaseObjectUseFor: calculationStore => {
    const leaseObjectUseFor = calculationStore.getValue('leaseObjectUseFor');
    if (
      [100000001, 100000002, 100000003, 100000004, 100000006].includes(
        leaseObjectUseFor,
      )
    ) {
      return {
        isValid: false,
        message: `По данной цели использования возможен только индивидуальный запрос тарифов КАСКО и ОСАГО. Просьба обратиться на адрес strakhovka@evoleasing.ru`,
      };
    }
    return { isValid: true };
  },
  selectLegalClientRegion: calculationStore => {
    const objectRegistration = calculationStore.getValue('objectRegistration');
    if (objectRegistration === 100000000) {
      const legalClientRegion = calculationStore.getValue('legalClientRegion');
      if (!legalClientRegion) {
        return {
          isValid: false,
          message: 'Не указан Регион по юр.адресу клиента',
        };
      }
    }
    return {
      isValid: true,
    };
  },
  selectLeaseObjectCategory: calculationStore => {
    const leaseObjectCategory = calculationStore.getValue(
      'leaseObjectCategory',
    );
    const leaseObjectType = calculationStore.getOption('selectLeaseObjectType');

    if (!leaseObjectCategory) {
      if (
        leaseObjectType?.evo_id &&
        ['6', '9', '10'].includes(leaseObjectType?.evo_id)
      ) {
        return {
          isValid: true,
        };
      } else
        return {
          isValid: false,
          message: 'Не указана категория ТС',
        };
    }

    return {
      isValid: true,
    };
  },

  cbxInsDecentral: calculationStore => {
    const insDecentral = calculationStore.getValue('insDecentral');
    if (insDecentral) {
      return {
        isValid: false,
        message: 'Децентрализованное страхование не может быть расчитано в ЭЛТ',
      };
    }
    return {
      isValid: true,
    };
  },

  selectLeasingWithoutKasko: calculationStore => {
    if (calculationStore.getValue('leasingWithoutKasko')) {
      return {
        isValid: false,
        message:
          'Вы осуществляете расчет с Лизинг без КАСКО, расчет ЭЛТ в данном случае не требуется',
      };
    }
    return {
      isValid: true,
    };
  },
};

export const resetFields: ElementsNames[] = [
  ...requiredFields,
  ...(Object.keys(conditions) as ElementsNames[]),
  'tbxInsAgeDrivers',
  'tbxInsExpDrivers',
  'selectLegalClientTown',
  'selectLegalClientRegion',
  'tbxVIN',
  'selectLeasingWithoutKasko',
];

export default {
  requiredFields,
  conditions,
};
