"use client";

import { useQuery } from "@tanstack/react-query";
import { useCallback, useMemo } from "react";
import { getFilterPanelText } from "@/components/ui/filter-panel";
import { useAppLanguage } from "@/components/providers/app-language-provider";
import { fetchDashboardDictionary } from "./dashboard/dashboard-translations";
import { resolveCdcGpsfUiLabels } from "./cdc-gpsf-ui-labels";

export function useCdcGpsfUiDictionary(page: string) {
  const { language } = useAppLanguage();
  const lang = language === "en" ? "en" : "kh";
  const { data } = useQuery({
    queryKey: ["translations", "cdcgpsf", page, lang],
    queryFn: ({ signal }) => fetchDashboardDictionary("cdcgpsf", lang, signal, page),
    staleTime: 30_000,
    refetchOnMount: "always",
    refetchOnWindowFocus: "always",
    retry: 1,
  });
  return data;
}

export function useCdcGpsfUiLabels<T extends object>(page: string, defaults: T, prefix: string): T {
  const data = useCdcGpsfUiDictionary(page);
  return useMemo(() => resolveCdcGpsfUiLabels(defaults, data ?? {}, prefix), [defaults, data, prefix]);
}

export function useCdcGpsfUiTranslation(page: string) {
  const data = useCdcGpsfUiDictionary(page);
  return useCallback((key: string, fallback: string) => data?.[key]?.trim() || fallback, [data]);
}

export function useCdcGpsfFilterLabels(page: string) {
  const { language } = useAppLanguage();
  return useCdcGpsfUiLabels(page, getFilterPanelText(language), "filter_panel");
}
