import { KEYVALUEPAIR } from "./interfaces";

interface VehicleData {
    scrapped: boolean;
    exported: boolean;
    imported: boolean;
    importNonEu: boolean;
    colourChange: boolean;
    plateChange: boolean;
    mileage: boolean;
    taxi: boolean;
    totalKeepers: number;
    keeperChanged: string[];
  }
  
  interface MotMileageSummary {
    totalTests: number;
    totalPassed: number;
    passedWithAdvisory: number;
    totalItemsAdvised: number;
    totalFailed: number;
    totalItemsFailed: number;
    mileageIssue: boolean;
    lastMileage: string;
    currentMileage: number;
    avgMileagePerYear: number;
    mileageStatus: string;
    passRatePercentage: number;
    passRateWithAdvisory: number;
    passRateWithoutAdvisory: number;
    advisoryAverage: number;
    recall: string;
  }
  
  interface MotTest {
    date: string;
    result: string;
    mileage: string;
    difference: number;
    days: string | number;
    failureCount: number;
    advisoryCount: number;
    failure: string[];
  }
  
  interface PlateChange {
    previous: string;
    current: string;
    latest: string;
  }
  
  interface MotTestList {
    keepersChange: string[][];
    motList: MotTest[];
    plateChange: PlateChange[];
  }
  
  interface MileageHistory {
    date: string;
    mileage: string;
    difference: number | null;
    s_no: string | number;
  }
  
  interface ChartGraph {
    headers: Record<string, unknown>;
    original: {
      date: string[];
      mileage: string[];
      color: string[];
    };
    exception: unknown | null;
  }
  
  interface VehicleInformation {
    DateOfLastUpdate: string;
    Colour: string;
    VehicleClass: string;
    CertificateOfDestructionIssued: boolean;
    EngineNumber: string;
    EngineCapacity: string;
    TransmissionCode: string;
    Exported: boolean;
    YearOfManufacture: string;
    WheelPlan: string;
    DateExported: string | null;
    Scrapped: boolean;
    Transmission: string;
    DateFirstRegisteredUk: string;
    Model: string;
    GearCount: number;
    ImportNonEu: boolean;
    PreviousVrmGb: string | null;
    GrossWeight: number | null;
    DoorPlanLiteral: string;
    MvrisModelCode: string | null;
    Vin: string;
    Vrm: string;
    DateFirstRegistered: string;
    DateScrapped: string | null;
    DoorPlan: string;
    YearMonthFirstRegistered: string;
    VinLast5: string;
    VehicleUsedBeforeFirstRegistration: boolean;
    MaxPermissibleMass: number | null;
    Make: string;
    MakeModel: string;
    TransmissionType: string;
    SeatingCapacity: number;
    FuelType: string;
    Co2Emissions: number;
    Imported: boolean;
    MvrisMakeCode: string | null;
    PreviousVrmNi: string | null;
    VinConfirmationFlag: string | null;
    makelogourl: string | null;
  }
  
  interface GeneralDetails {
    Engine: {
      FuelCatalyst: string;
      Stroke: number;
      PrimaryFuelFlag: string;
      ValvesPerCylinder: number;
      Aspiration: string;
      FuelSystem: string;
      NumberOfCylinders: number;
      CylinderArrangement: string;
      ValveGear: string;
      Location: string;
      Description: string | null;
      Bore: number;
      Make: string;
      FuelDelivery: string;
    };
    PowerDelivery: string;
    TypeApprovalCategory: string;
    ElectricVehicleBattery: {
      Capacity: number | null;
      ChargePort: string | null;
      ChargeTime: string | null;
      Type: string | null;
    };
    SeriesDescription: string;
    DriverPosition: string;
    DrivingAxle: string;
    DataVersionNumber: string | null;
    EuroStatus: string;
    IsLimitedEdition: boolean;
  }
  
  interface Performance {
    Torque: {
      FtLb: number;
      Nm: number;
      Rpm: number;
    };
    NoiseLevel: number | null;
    DataVersionNumber: string | null;
    Power: {
      Bhp: number;
      Rpm: number;
      Kw: number;
    };
    MaxSpeed: {
      Kph: number;
      Mph: number;
    };
    Co2: number | null;
    Particles: number | null;
    Acceleration: {
      Mph: number | null;
      Kph: number | null;
      ZeroTo60Mph: number | null;
      ZeroTo100Kph: number | null;
    };
  }
  
  interface Consumption {
    ExtraUrban: {
      Lkm: number;
      Mpg: number;
    };
    UrbanCold: {
      Lkm: number;
      Mpg: number;
    };
    Combined: {
      Lkm: number;
      Mpg: number;
    };
  }


  
  interface Dimensions {
    UnladenWeight: number;
    RigidArtic: string;
    BodyShape: string;
    PayloadVolume: number | null;
    PayloadWeight: number | null;
    Height: number;
    NumberOfDoors: number;
    NumberOfSeats: number;
    KerbWeight: number;
    GrossTrainWeight: number | null;
    FuelTankCapacity: number;
    LoadLength: number | null;
    DataVersionNumber: string | null;
    WheelBase: number;
    CarLength: number;
    Width: number;
    NumberOfAxles: number;
    GrossVehicleWeight: number;
    GrossCombinedWeight: number;
  }
  
  interface Safety {
    EuroNcap: {
      Child: number | null;
      Adult: number | null;
      Pedestrian: number | null;
    };
  }
  
  interface ImportExport {
    exported: boolean;
    dateExported: string | null;
    importNonEu: boolean;
    imported: boolean;
  }
  
  interface ClassificationDetails {
    Smmt: {
      Make: string;
      Mvris: {
        ModelCode: string | null;
        MakeCode: string | null;
      };
      Trim: string;
      Range: string;
    };
    Dvla: {
      Model: string;
      Make: string;
    };
    Ukvd: {
      IsElectricVehicle: boolean;
      VrmFormat: {
        IsGbGeneralFormat: boolean;
        IsNiGeneralFormat: boolean;
      };
    };
  }

  interface smmtDetails{
    Marque:string,
  }
  
  interface VehicleTaxCo2Emissions {
      StandardSixMonth: { Amount: number | string; PerMonth: number };
      StandardTwelveMonth: { Amount: number; PerMonth: number };
      FirstYearSixMonth: { Amount: string; PerMonth: number };
      "First Year Twelve Month": { Amount: number; PerMonth: number };
      "PremiumVehicleYear2to6-SixMonth": { Amount: string; PerMonth: number };
      "PremiumVehicleYear2to6-Twelve Month": { Amount: string; PerMonth: number };
      VedCo2Emissions: string;
      VedBand: string;
      VedCo2Band: string;
  }
  
  interface ScrapDestruction {
    scrapped: boolean;
    dateofScapped: string | null;
    certificateofDestructionIssued: boolean;
    vehicleIdCheckCount: boolean;
  }
  
  interface ColourChange {
    CurrentColour: string;
    NumberOfPreviousColours: number;
    OriginalColour: string | null;
    LastColour: string | null;
    DateOfLastColourChange: string | null;
  }
  export type ROAD_TAX_MOT_types = {
    registrationNumber: string;
    taxStatus: string;
    taxDueDate: string;
    motStatus: string;
    make: string;
    yearOfManufacture: number;
    engineCapacity: number;
    co2Emissions: number;
    fuelType: string;
    markedForExport: boolean;
    colour: string;
    typeApproval: string;
    dateOfLastV5CIssued: string;
    motExpiryDate: string;
    wheelplan: string;
    monthOfFirstRegistration: string;
  };
  
  interface ElectricVehicleData {
    MaxRangeMiles: number;
    MaxRangeKm: number;
    Co2: number;
    DragCoefficient: number | null;
    OtaUpgradable: boolean;
    LatestOtaVersion: string | null;
    HwVersion: string | null;
    WhMile: number;
    ZeroEmissionMiles: number;
    MaxKwChargeInput: number | null;
    MaxMilesPerChargeHour: number;
    MaxMilesPerChargeMinute: number;
    ManufacturerWarrantyMiles: number;
    ManufacturerWarrantyMonths: number;
    DrivetrainVersionDescription: string | null;
    TeslaSuperchargerCompatible: boolean;
    VehicleType: string;
    TeslaSupercharging: {
      Version1: {
        MaxChargeKw: number | null;
        IsCompatible: boolean | null;
        RequiresCcsAdaptor: boolean | null;
        AverageChargeTime10To80Percent: number | null;
      };
      Version2: {
        MaxChargeKw: number | null;
        IsCompatible: boolean | null;
        RequiresCcsAdaptor: boolean | null;
        AverageChargeTime10To80Percent: number | null;
      };
      Version3: {
        MaxChargeKw: number | null;
        IsCompatible: boolean | null;
        RequiresCcsAdaptor: boolean | null;
        AverageChargeTime10To80Percent: number | null;
      };
    };
    BatteryDetailsCount: number;
    BatteryDetailsList: Array<{
      CapacityKwh: number;
      BatteryDescription: string;
      Chemistry: string;
      Voltage: number;
      BatteryLocation: string;
      BatteryWarrantyMonths: number;
      BatteryWarrantyMiles: number;
    }>;
    ChargePortDetailsCount: number;
    ChargePortDetailsList: Array<{
      PortType: string;
      PortLocation: string;
      MaxChargePowerKw: number;
      ChargeTimes: {
        AverageChargeTimes10To80Percent: Array<{
          ChargePortKw: number;
          TimeInMinutes: number | null;
        }>;
      };
    }>;
    ChargePortCount: number;
    MotorDetailsCount: number;
    MotorDetailsList: Array<{
      Manufacturer: string;
      Model: string | null;
      MotorType: string;
      PowerKw: number;
      MaxPowerRpm: number | null;
      MaxTorqueNm: number;
      RegenBraking: boolean;
      AdditionalInformation: string | null;
      MotorLocation: string;
    }>;
    TransmissionDetailsCount: number;
    TransmissionDetailsList: Array<{
      TransmissionType: string;
      NumberOfGears: number;
      TransmissionLocation: string | null;
    }>;
    RangeFigures: {
      RangeTestCycleDetailsList: Array<{
        EvRangeTestType: string;
        CombinedRangeMiles: number;
        CombinedRangeKm: number;
        CityRangeMiles: number | null;
        CityRangeKm: number | null;
      }>;
    };
     Identification: {
      IsElectricVehicle: boolean;
     };
  }
  
  interface VehicleDetails {
    vehicle_view_more_btn: {
      status: number;
    };
    vehicle_captcha_btn:{
      status: number;
    };
    checkListShowData :{
      SHOW_DATA: number;
      WITHOUT_VIEW_MORE: number;
    };
    
    co2emission: number;
    vehicleData: VehicleData;
    motMileageSummary: MotMileageSummary;
    motTestList: MotTestList;
    mileageHistory: MileageHistory[];
    chartGraph: ChartGraph;
    vehicleInformation: VehicleInformation;
    general: GeneralDetails;
    performance: Performance;
    consumption: Consumption;
    dimensions: Dimensions;
    safety: Safety;
    importExport: ImportExport;
    classificationDetails: ClassificationDetails;
    smmtDetails: smmtDetails;
    vehicleTaxCo2Emissions: VehicleTaxCo2Emissions;
    scrapDestruction: ScrapDestruction;
    colourChange: ColourChange;
    V5CCertificates: KEYVALUEPAIR;
    electricVehicleData: ElectricVehicleData;
  }
  