import Button from 'client/Elements/Button';
import Checkbox from 'client/Elements/Checkbox';
import Input from 'client/Elements/Input';
import InputNumber from 'client/Elements/InputNumber';
import Label from 'client/Elements/Label';
import Link from 'client/Elements/Link';
import Radio from 'client/Elements/Radio';
import Select from 'client/Elements/Select';
import Switch from 'client/Elements/Switch';
import Table from 'client/Elements/Table';
import { FC } from 'react';
import { AllElementsNames } from '../types/elements';
import { TableNames } from './../types/tables';

export default {
  selectProduct: Select,
  selectClientRisk: Select,
  selectClientType: Select,
  selectSupplierCurrency: Select,
  tbxLeaseObjectPrice: InputNumber,
  tbxLeaseObjectPriceWthtVAT: InputNumber,
  tbxVATInLeaseObjectPrice: InputNumber,
  tbxSupplierDiscountRub: InputNumber,
  tbxSupplierDiscountPerc: InputNumber,
  radioBalanceHolder: Radio,
  tbxSaleBonus: InputNumber,
  tbxBonusCoefficient: InputNumber,
  tbxFirstPaymentPerc: InputNumber,
  tbxFirstPaymentRub: InputNumber,
  radioLastPaymentRule: Radio,
  tbxLastPaymentPerc: InputNumber,
  tbxLastPaymentRub: InputNumber,
  tbxRedemptionPaymentSum: InputNumber,
  tbxLeasingPeriod: InputNumber,
  radioGraphType: Radio,
  tbxParmentsDecreasePercent: InputNumber,
  selectSeasonType: Select,
  selectHighSeasonStart: Select,
  tbxComissionPerc: InputNumber,
  tbxComissionRub: InputNumber,
  selectLeaseObjectType: Select,
  selectBrand: Select,
  selectModel: Select,
  selectConfiguration: Select,
  labelDepreciationGroup: Label,
  cbxLeaseObjectUsed: Checkbox,
  radioDeliveryTime: Radio,
  tbxLeaseObjectCount: InputNumber,
  selectLeaseObjectUseFor: Select,
  tbxLeaseObjectYear: InputNumber,
  selectLeaseObjectCategory: Select,
  selectEngineType: Select,
  tbxLeaseObjectMotorPower: InputNumber,
  tbxEngineVolume: InputNumber,
  tbxMaxMass: InputNumber,
  tbxCountSeats: InputNumber,
  tbxMaxSpeed: InputNumber,
  cbxWithTrailer: Checkbox,
  selectDealer: Select,
  selectDealerPerson: Select,
  selectDealerRewardCondition: Select,
  tbxDealerRewardSumm: InputNumber,
  selectDealerBroker: Select,
  selectDealerBrokerRewardCondition: Select,
  tbxDealerBrokerRewardSumm: InputNumber,
  selectIndAgent: Select,
  selectIndAgentRewardCondition: Select,
  tbxIndAgentRewardSumm: InputNumber,
  selectCalcDoubleAgent: Select,
  selectCalcDoubleAgentRewardCondition: Select,
  tbxCalcDoubleAgentRewardSumm: InputNumber,
  selectCalcBroker: Select,
  selectCalcBrokerRewardCondition: Select,
  tbxCalcBrokerRewardSum: InputNumber,
  selectCalcFinDepartment: Select,
  selectFinDepartmentRewardCondtion: Select,
  tbxFinDepartmentRewardSumm: InputNumber,
  cbxInsDecentral: Switch,
  radioInsKaskoType: Radio,
  tbxInsFranchise: InputNumber,
  cbxInsUnlimitDrivers: Switch,
  tbxInsAgeDrivers: InputNumber,
  tbxInsExpDrivers: InputNumber,
  tbxINNForCalc: InputNumber,
  selectGPSBrand: Select,
  selectGPSModel: Select,
  selectRegionRegistration: Select,
  selectTownRegistration: Select,
  radioInfuranceOPF: Radio,
  selectRegistration: Select,
  selectInsNSIB: Select,
  radioRequirementTelematic: Radio,
  selectTracker: Select,
  selectTelematic: Select,
  selectTechnicalCard: Select,
  cbxLastPaymentRedemption: Switch,
  cbxPriceWithDiscount: Switch,
  cbxFullPriceWithDiscount: Switch,
  cbxCostIncrease: Switch,
  cbxInsurance: Switch,
  cbxRegistrationQuote: Switch,
  cbxTechnicalCardQuote: Switch,
  cbxNSIB: Switch,
  cbxQuoteRedemptionGraph: Switch,
  cbxShowFinGAP: Switch,
  tbxQuoteName: Input,
  radioQuoteContactGender: Radio,
  cbxDisableChecks: Switch,
  selectTarif: Select,
  tbxCreditRate: InputNumber,
  selectRate: Select,
  tbxMaxPriceChange: InputNumber,
  tbxImporterRewardPerc: InputNumber,
  tbxImporterRewardRub: InputNumber,
  selectLead: Select,
  selectOpportunity: Select,
  selectQuote: Select,
  cbxRecalcWithRevision: Checkbox,
  tbxIRR_Perc: InputNumber,
  tbxMileage: InputNumber,
  tbxEngineHours: InputNumber,
  radioCalcType: Radio,
  tbxTotalPayments: InputNumber,
  radioObjectRegistration: Radio,
  selectObjectRegionRegistration: Select,
  tbxVehicleTaxInYear: InputNumber,
  tbxVehicleTaxInLeasingPeriod: InputNumber,
  selectObjectCategoryTax: Select,
  selectObjectTypeTax: Select,
  radioTypePTS: Radio,
  selectLegalClientRegion: Select,
  selectLegalClientTown: Select,
  selectSubsidy: Select,
  selectFuelCard: Select,
  labelSubsidySum: Label,
  tbxMinPriceChange: InputNumber,
  selectImportProgram: Select,
  tbxAddEquipmentPrice: InputNumber,
  tbxVIN: Input,

  /** Computed Elements */
  labelLeaseObjectRisk: Label,
  tbxInsKaskoPriceLeasePeriod: InputNumber,
  labelIrrInfo: Label,
  labelRegistrationDescription: Label,
  labelImportProgramSum: Label,
  selectLeasingWithoutKasko: Select,

  /** Result Elements */
  labelResultTotalGraphwithNDS: Label,
  labelResultPlPrice: Label,
  labelResultPriceUpPr: Label,
  labelResultIRRGraphPerc: Label,
  labelResultIRRNominalPerc: Label,
  labelResultInsKasko: Label,
  labelResultInsOsago: Label,
  labelResultDopProdSum: Label,
  labelResultFirstPayment: Label,
  labelResultLastPayment: Label,
  labelResultTerm: Label,
  labelResultAB_FL: Label,
  labelResultAB_UL: Label,
  labelResultBonusMPL: Label,
  labelResultDopMPLLeasing: Label,
  labelResultBonusDopProd: Label,
  labelResultBonusSafeFinance: Label,
  labelResultFirstPaymentRiskPolicy: Label,
  labelResultParticipationAmount: Label,

  /** Button Elements */
  btnCreateKP: Button,
  btnCalculate: Button,

  /** Link Elements */
  linkDownloadKp: Link,

  /** Table Elements */
  tablePayments: Table,
  tableInsurance: Table,
  tableResults: Table,
} as Record<AllElementsNames | TableNames, FC<any>>;
