'use client';

import { useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { useTranslation } from 'react-i18next';
import { RootState } from '@/store';
import { setValidation } from '@/store/slices/installation-slice';
import { InstallationRepository } from '@/repositories/teltoinstall/_index';
import { apiErrorMessage } from '@/utils/teltoinstall/_index';
import { InstallationValidation } from '@/models/teltoinstall/_index';

export function useGpsTest() {
  const { t } = useTranslation();
  const dispatch = useDispatch();
  const { installationId, validation } = useSelector((state: RootState) => state.installation);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState<string | null>(null);
  const [result, setResult] = useState<InstallationValidation | null>(null);

  async function runTest() {
    if (!installationId) return;
    setLoading(true);
    setError(null);
    try {
      const data = await InstallationRepository.runGpsTest(installationId);
      setResult(data);
      dispatch(setValidation(data));
    } catch (err) {
      setError(apiErrorMessage(err, t('errors.generic')));
    } finally {
      setLoading(false);
    }
  }

  return { runTest, loading, error, result: result ?? (Object.keys(validation).length ? validation : null) };
}
