import { IAccount } from 'core/services/CrmService/types/entities';
import { ICalculationStore } from 'core/types/Calculation/Store';
import { reaction } from 'mobx';
import { ElementStatus } from 'types/elements';

export default function leasebackReactions($calculation: ICalculationStore) {
  /**
 * Дополнить реакцию на изменение поля Салон приобретения selectDealer:

если в поле selectDealer указан account, у которого evo_return_leasing_dealer = true, то

1) поле selectDealerPerson обнулять и закрывать для редактирования,
иначе формировать список связанных значений 

2) в таблице страхования в столбце Плательщик в строках ОСАГО и КАСКО указывать "Лизингополучатель" (100 000 000) и закрывать для редактирования ,
иначе открывать данные поля для редактирования

3) ПЛ БУ cbxLeaseObjectUsed = true
 */
  reaction(
    () => {
      return $calculation.getOption('selectDealer') as IAccount;
    },
    dealer => {
      if (dealer.evo_return_leasing_dealer === true) {
        // TODO: мб сбрасывать dealerPerson и dealerBroker

        $calculation.setTableRow('tableInsurance', rows =>
          rows.findIndex(x => x.key === 'kasko'),
        )({
          insured: { value: 100_000_000, status: ElementStatus.Disabled },
        });

        $calculation.setValue('leaseObjectUsed', true);
      } else {
        $calculation.setTableRow('tableInsurance', rows =>
          rows.findIndex(x => x.key === 'kasko'),
        )({
          insured: { status: ElementStatus.Default },
        });
      }
    },
  );

  // объединили реакцию для прицепа и возвратного лизинга
  reaction(
    () => {
      return {
        dealer: $calculation.getOption('selectDealer') as IAccount,
        leaseObjectCategory: $calculation.getValue('leaseObjectCategory'),
      };
    },
    ({ dealer, leaseObjectCategory }) => {
      const isTrailer = leaseObjectCategory === 100000004;
      const returnLeasing = dealer.evo_return_leasing_dealer === true;

      if (isTrailer || returnLeasing) {
        $calculation.setTableRow('tableInsurance', rows =>
          rows.findIndex(x => x.key === 'osago'),
        )({
          insured: { value: 100_000_000, status: ElementStatus.Disabled },
        });
      } else {
        $calculation.setTableRow('tableInsurance', rows =>
          rows.findIndex(x => x.key === 'osago'),
        )({
          insured: { status: ElementStatus.Default },
        });
      }
    },
  );
}
