// External libraries
import { useState } from "react";

// Utils
import { makeInitialFilters } from "../utils/makeInitialFilters";

// Types
import { StatisticsFormRequest } from "@/src/services/api/statistics/dtos";
import { useQuery } from "@tanstack/react-query";
import { StatisticsService } from "@/src/services/api/statistics";
import { PropertiesService } from "@/src/services/api/properties";
import { downloadPropertiesXlsx } from "@/src/utils/downloadPropertiesXlsx";

export function useHomepage() {
  const [filters, setFilters] =
    useState<StatisticsFormRequest>(makeInitialFilters);
  const [isDownloading, setIsDownloading] = useState(false);

  const { data, isLoading } = useQuery({
    queryKey: ["statistics", filters],
    queryFn: async () => await StatisticsService.getStatistics(filters),
  });

  const updateFilter = (key: keyof StatisticsFormRequest, value: string | null) => {
    setFilters((prev) => ({ ...prev, [key]: value }));
  };

  const clearFilters = () => {
    setFilters(makeInitialFilters());
  };

  async function handleDownloadXlsx() {
    setIsDownloading(true);
    try {
      const allProperties = await PropertiesService.getAllAggregated();
      await downloadPropertiesXlsx(allProperties);
    } catch (err: unknown) {
      console.error("Erro ao baixar planilha:", err);
    } finally {
      setIsDownloading(false);
    }
  }

  return {
    isLoading,
    isDownloading,
    filters,
    updateFilter,
    clearFilters,
    handleDownloadXlsx,
    production: data?.production,
    licenses: data?.licenses,
    macroIndicators: data?.macroIndicators,
    mesoIndicators: data?.mesoIndicators,
  };
}
