"use client";

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

import type {
  CdcIssueMatrixRow,
  CdcIssueMatrixSummary,
} from "../components/cdc-issue-matrix-data";
import {
  getCdcIssueMatrixIssues,
  getCdcIssueMatrixSummary,
} from "../service/cdc-issue-matrix-service";

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

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

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

export function useCdcIssueMatrixList() {
  const query = useQuery({
    queryKey: cdcIssueMatrixQueryKeys.list(),
    queryFn: getCdcIssueMatrixIssues,
  });

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

export function useCdcIssueMatrixSummary() {
  const query = useQuery({
    queryKey: cdcIssueMatrixQueryKeys.summary(),
    queryFn: getCdcIssueMatrixSummary,
  });

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