'use client';

import { useEffect, useState } from 'react';
import { InstallationRequestDetail } from '@/models/teltoinstall/_index';
import { InstallationRequestRepository } from '@/repositories/teltoinstall/_index';

export function useInstallationRequestDetail(id: number | null) {
  const [request, setRequest] = useState<InstallationRequestDetail | null>(null);
  const [error, setError] = useState<string | null>(null);
  // Suit l'id auquel appartient le résultat stocké, pour ne jamais afficher une
  // réponse périmée d'une demande précédemment sélectionnée.
  const [fetchedId, setFetchedId] = useState<number | null>(null);

  useEffect(() => {
    if (id == null) return;
    let active = true;
    InstallationRequestRepository.getDetail(id)
      .then((data) => {
        if (!active) return;
        setRequest(data);
        setError(null);
        setFetchedId(id);
      })
      .catch(() => {
        if (!active) return;
        setError('requests.loadError');
        setFetchedId(id);
      });
    return () => {
      active = false;
    };
  }, [id]);

  const resolved = fetchedId === id;

  return {
    request: resolved ? request : null,
    error: resolved ? error : null,
    loading: id != null && !resolved,
    setRequest,
  };
}
