import { useState, useEffect } from "react";
import GlobalRepository from "../repositories/GlobalRepository";

// 🔹 Dashboard Progression Data Hook
export const useDashboard_Data = ({ days, FromDate, projectId }) => {
  const [dashboard_data, setDashboard_Data] = useState([]);
  const [isLineChartLoading, setLoading] = useState(false);
  const [error, setError] = useState("");

  useEffect(() => {
    if (!days) return;

    const fetchData = async () => {
      setLoading(true);
      setError("");

      try {
        const payload = {
          days,
          FromDate: FromDate || '',
          projectId: projectId || null,
        };

        const response = await GlobalRepository.getDashboardProgressionData(payload);
        setDashboard_Data(response.data);
      } catch (err) {
        setError("Failed to fetch dashboard data.");
        console.error(err);
      } finally {
        setLoading(false);
      }
    };

    fetchData();
  }, [days, FromDate, projectId]);

  return { dashboard_data, loading: isLineChartLoading, error };
};

// 🔹 Dashboard Projects Card Data Hook
export const useDashboardProjectsCardData = () => {
  const [projectsCardData, setProjectsData] = useState([]);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState("");

  useEffect(() => {
    const fetchProjectsData = async () => {
      setLoading(true);
      setError("");

      try {
        const response = await GlobalRepository.getDashboardProjectsCardData();
        setProjectsData(response.data);
      } catch (err) {
        setError("Failed to fetch projects card data.");
        console.error(err);
      } finally {
        setLoading(false);
      }
    };

    fetchProjectsData();
  }, []);

  return { projectsCardData, loading, error };
};

// 🔹 Dashboard Teams Card Data Hook
export const useDashboardTeamsCardData = () => {
  const [teamsCardData, setTeamsData] = useState([]);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState("");

  useEffect(() => {
    const fetchTeamsData = async () => {
      setLoading(true);
      setError("");

      try {
        const response = await GlobalRepository.getDashboardTeamsCardData();
        setTeamsData(response.data);
      } catch (err) {
        setError("Failed to fetch teams card data.");
        console.error(err);
      } finally {
        setLoading(false);
      }
    };

    fetchTeamsData();
  }, []);

  return { teamsCardData, loading, error };
};

// 🔹 Dashboard Tasks Card Data Hook
export const useDashboardTasksCardData = () => {
  const [tasksCardData, setTasksData] = useState([]);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState("");

  useEffect(() => {
    const fetchTasksData = async () => {
      setLoading(true);
      setError("");

      try {
        const response = await GlobalRepository.getDashboardTasksCardData();
        setTasksData(response.data);
      } catch (err) {
        setError("Failed to fetch tasks card data.");
        console.error(err);
      } finally {
        setLoading(false);
      }
    };

    fetchTasksData();
  }, []);

  return { tasksCardData, loading, error };
};
