import { useState, useEffect } from "react";
import {
  DashboardStats,
  AtividadeRecente,
  PedidoPendente,
} from "@/services/dashboardService";

interface UseDashboardDataProps {
  userRole: string;
  empresaId?: string;
}

interface DashboardData {
  stats: DashboardStats | null;
  atividades: AtividadeRecente[];
  pedidosPendentes: PedidoPendente[];
  loading: boolean;
  error: string | null;
}

export const useDashboardData = ({
  userRole,
  empresaId,
}: UseDashboardDataProps): DashboardData => {
  const [stats, setStats] = useState<DashboardStats | null>(null);
  const [atividades, setAtividades] = useState<AtividadeRecente[]>([]);
  const [pedidosPendentes, setPedidosPendentes] = useState<PedidoPendente[]>(
    []
  );
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState<string | null>(null);

  const fetchDashboardData = async () => {
    if (!userRole) return;

    setLoading(true);
    setError(null);

    try {
      console.log(
        `📊 [useDashboardData] Buscando dados para role: ${userRole}, empresa: ${empresaId}`
      );

      // Buscar estatísticas
      const statsParams = new URLSearchParams({
        userRole,
        type: "stats",
      });
      if (empresaId) {
        statsParams.append("empresaId", empresaId);
      }

      const statsResponse = await fetch(`/api/dashboard?${statsParams}`);
      const statsData = await statsResponse.json();

      if (statsData.success) {
        setStats(statsData.data);
        console.log(
          `✅ [useDashboardData] Estatísticas obtidas:`,
          statsData.data
        );
      } else {
        throw new Error(statsData.error || "Erro ao buscar estatísticas");
      }

      // Buscar atividades recentes
      const activitiesParams = new URLSearchParams({
        userRole,
        type: "activities",
      });
      if (empresaId) {
        activitiesParams.append("empresaId", empresaId);
      }

      const activitiesResponse = await fetch(
        `/api/dashboard?${activitiesParams}`
      );
      const activitiesData = await activitiesResponse.json();

      if (activitiesData.success) {
        setAtividades(activitiesData.data || []);
        console.log(
          `✅ [useDashboardData] Atividades obtidas:`,
          activitiesData.data?.length || 0
        );
      }

      // Buscar pedidos pendentes
      const pendingParams = new URLSearchParams({
        userRole,
        type: "pending",
      });
      if (empresaId) {
        pendingParams.append("empresaId", empresaId);
      }

      const pendingResponse = await fetch(`/api/dashboard?${pendingParams}`);
      const pendingData = await pendingResponse.json();

      if (pendingData.success) {
        setPedidosPendentes(pendingData.data || []);
        console.log(
          `✅ [useDashboardData] Pedidos pendentes obtidos:`,
          pendingData.data?.length || 0
        );
      }
    } catch (err) {
      console.error("❌ [useDashboardData] Erro ao buscar dados:", err);
      setError(err instanceof Error ? err.message : "Erro desconhecido");
    } finally {
      setLoading(false);
    }
  };

  useEffect(() => {
    fetchDashboardData();
  }, [userRole, empresaId]);

  return {
    stats,
    atividades,
    pedidosPendentes,
    loading,
    error,
  };
};

export default useDashboardData;
