/**
 * Paperclip agent activity hooks — mirror agent work into Legal-AI UI.
 */

import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "./client";

// ── Types ────────────────────────────────────────────────────────

export type PaperclipIssue = {
  id: string;
  title: string;
  status: string;
  identifier: string;
  priority: string;
  assignee_name: string | null;
  started_at: string | null;
  completed_at: string | null;
  created_at: string | null;
  company_id: string;
};

export type PaperclipComment = {
  id: string;
  issue_id: string;
  body: string;
  created_at: string | null;
  author_agent_id: string | null;
  author_user_id: string | null;
  agent_name: string | null;
  agent_role: string | null;
  agent_icon: string | null;
};

export type PaperclipAgent = {
  id: string;
  name: string;
  role: string;
  title: string | null;
  status: string;
  icon: string | null;
  last_heartbeat_at: string | null;
};

export type AgentActivityResponse = {
  issues: PaperclipIssue[];
  comments: PaperclipComment[];
  agents: PaperclipAgent[];
};

// ── Query Keys ───────────────────────────────────────────────────

export const agentKeys = {
  activity: (caseNumber: string) =>
    ["agents", "activity", caseNumber] as const,
};

// ── Hooks ────────────────────────────────────────────────────────

export function useAgentActivity(caseNumber: string | undefined) {
  return useQuery({
    queryKey: agentKeys.activity(caseNumber ?? ""),
    queryFn: ({ signal }) =>
      apiRequest<AgentActivityResponse>(
        `/api/cases/${caseNumber}/agents`,
        { signal },
      ),
    enabled: !!caseNumber,
    refetchInterval: 10_000,
  });
}

export function useSendComment(caseNumber: string | undefined) {
  const qc = useQueryClient();
  return useMutation({
    mutationFn: (vars: { body: string; issue_id?: string }) =>
      apiRequest<{ comment_id: string; issue_id: string; issue_identifier: string }>(
        `/api/cases/${caseNumber}/agents/comment`,
        { method: "POST", body: vars },
      ),
    onSuccess: () => {
      if (caseNumber) {
        qc.invalidateQueries({ queryKey: agentKeys.activity(caseNumber) });
      }
    },
  });
}
