"use client";

import { useQuery } from "@tanstack/react-query";

import type {
  CefpIssueMatrixRow,
  CefpIssueMatrixSummary,
} from "../components/cefp-issue-matrix-data";
import {
  getCefpIssueMatrixIssues,
  getCefpIssueMatrixSummary,
} from "../service/cefp-issue-matrix-service";

const EMPTY_ROWS: CefpIssueMatrixRow[] = [];
const EMPTY_SUMMARY: CefpIssueMatrixSummary = {
  totalIssues: 0,
  solved: 0,
  inProgress: 0,
  notAddressed: 0,
  totalPrimaryAgencies: 0,
};

const cefpIssueMatrixQueryKeys = {
  all: ["cefp-issue-matrix"] as const,
  list: () => [...cefpIssueMatrixQueryKeys.all, "list"] as const,
  summary: () => [...cefpIssueMatrixQueryKeys.all, "summary"] as const,
};

function getErrorMessage(error: unknown, fallback: string) {
  return error instanceof Error ? error.message : fallback;
}

export function useCefpIssueMatrixList() {
  const query = useQuery({
    queryKey: cefpIssueMatrixQueryKeys.list(),
    queryFn: getCefpIssueMatrixIssues,
  });

  return {
    rows: query.data ?? EMPTY_ROWS,
    isLoading: query.isLoading,
    error: query.error
      ? getErrorMessage(query.error, "Unable to load CEFP issue matrix.")
      : null,
  };
}

export function useCefpIssueMatrixSummary() {
  const query = useQuery({
    queryKey: cefpIssueMatrixQueryKeys.summary(),
    queryFn: getCefpIssueMatrixSummary,
  });

  return {
    summary: query.data ?? EMPTY_SUMMARY,
    isLoading: query.isLoading,
    error: query.error
      ? getErrorMessage(
          query.error,
          "Unable to load CEFP issue matrix summary.",
        )
      : null,
  };
}
