'use client';

import { useDispatch, useSelector } from 'react-redux';
import { useTranslation } from 'react-i18next';
import * as Yup from 'yup';
import { RootState } from '@/store';
import { setVehicleData } from '@/store/slices/installation-slice';
import { setSaving, setSaveError } from '@/store/slices/installation-slice';
import { InstallationRepository } from '@/repositories/teltoinstall/_index';
import { apiErrorMessage } from '@/utils/teltoinstall/_index';
import { Vehicle } from '@/models/teltoinstall/_index';

export function useVehicleStep() {
  const { t } = useTranslation();
  const dispatch = useDispatch();
  const { vehicle, installationId } = useSelector((state: RootState) => state.installation);

  const validationSchema = Yup.object({
    license_plate: Yup.string().required(t('errors.licensePlateRequired')),
    vin: Yup.string().length(17, t('errors.vinLength')).optional(),
    odometer_km: Yup.number().optional(),
    hour_meter: Yup.number().optional(),
    fuel_level: Yup.string().optional(),
  });

  async function saveVehicle(values: Partial<Vehicle>, idOverride?: number): Promise<boolean> {
    dispatch(setVehicleData(values));
    const id = idOverride ?? installationId;
    if (!id) return false;
    dispatch(setSaving(true));
    try {
      await InstallationRepository.update(id, { vehicle: values as Vehicle });
      return true;
    } catch (err) {
      dispatch(setSaveError(apiErrorMessage(err, t('wizard.saveError'))));
      return false;
    } finally {
      dispatch(setSaving(false));
    }
  }

  return { vehicle, validationSchema, saveVehicle };
}
