"use client";

import { useState, useEffect, useCallback } from "react";
import {
  getCompanyAuditsPaginated,
  createCompanyAudit,
  updateCompanyAudit,
  deleteCompanyAudit,
} from "@/lib/api/companyAudit.api";
import { mapCompanyAuditsApiResponse } from "@/lib/api/mappers/companyAudit.mappers";
import type {
  CompanyAuditRow,
  CreateCompanyAuditDto,
  UpdateCompanyAuditDto,
} from "@/lib/api/types/companyAudit.types";

// ─── useCompanyAudits ─────────────────────────────────────────────────────────
export function useCompanyAudits() {
  const [audits, setAudits]   = useState<CompanyAuditRow[]>([]);
  const [loading, setLoading] = useState(false);
  const [error, setError]     = useState<string | null>(null);

  const refresh = useCallback(() => {
    setLoading(true);
    setError(null);
    getCompanyAuditsPaginated({ page: 1, limit: 1000 })
      .then((data) => setAudits(mapCompanyAuditsApiResponse(data.data)))
      .catch((err) => setError(err.message))
      .finally(() => setLoading(false));
  }, []);

  useEffect(() => { refresh(); }, [refresh]);

  return { audits, loading, error, refresh };
}

// ─── useCompanyAuditMutations ─────────────────────────────────────────────────
export function useCompanyAuditMutations(onSuccess?: () => void) {
  const [saving, setSaving]               = useState(false);
  const [deleting, setDeleting]           = useState(false);
  const [mutationError, setMutationError] = useState<string | null>(null);

  const create = async (dto: CreateCompanyAuditDto) => {
    setSaving(true); setMutationError(null);
    try { const r = await createCompanyAudit(dto); onSuccess?.(); return r; }
    catch (err: any) { setMutationError(err.message); return null; }
    finally { setSaving(false); }
  };

  const update = async (id: number, dto: UpdateCompanyAuditDto) => {
    setSaving(true); setMutationError(null);
    try { const r = await updateCompanyAudit(id, dto); onSuccess?.(); return r; }
    catch (err: any) { setMutationError(err.message); return null; }
    finally { setSaving(false); }
  };

  const remove = async (id: number) => {
    setDeleting(true); setMutationError(null);
    try { await deleteCompanyAudit(id); onSuccess?.(); return true; }
    catch (err: any) { setMutationError(err.message); return false; }
    finally { setDeleting(false); }
  };

  return { create, update, remove, saving, deleting, mutationError };
}
