"use client";

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

// ── Types (mirror backend Pydantic schemas) ───────────────────────────────────

export interface BondRisk {
  composite_score: number;
  composite_grade: string;
  rating_score: number | null;
  rating_grade: string | null;
  spread_score: number;
  spread_used: string;
  spread_bps: number | null;
  is_investment_grade: boolean;
}

export interface LsegBond {
  isin: string | null;
  name: string | null;
  issuer: string | null;
  coupon: number | null;
  maturity_date: string | null;
  ytm: number | null;
  ytw: number | null;
  z_spread: number | null;
  asset_swap_spread: number | null;
  rating_moodys: string | null;
  price: number | null;
  country: string | null;
  sector: string | null;
  currency: string | null;
  risk: BondRisk;
}

export interface LsegBondList {
  bonds: LsegBond[];
  count: number;
}

export interface LsegPortfolioSummary {
  total_bonds: number;
  avg_composite_score: number | null;
  grade_distribution: Record<string, number>;
  investment_grade_count: number;
  high_yield_count: number;
  avg_spread_bps: number | null;
}

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

export function useLsegBonds(forceRefresh = false) {
  return useQuery<LsegBondList>({
    queryKey: ["lseg-credit", "bonds", forceRefresh],
    queryFn: async () => {
      const { data } = await api.get(
        `/api/lseg-credit/bonds?force_refresh=${forceRefresh}`
      );
      return data;
    },
    staleTime: 30 * 60_000,
  });
}

export function useLsegBond(isin: string) {
  return useQuery<LsegBond>({
    queryKey: ["lseg-credit", "bond", isin],
    queryFn: async () => {
      const { data } = await api.get(`/api/lseg-credit/bonds/${isin}`);
      return data;
    },
    enabled: !!isin,
    staleTime: 30 * 60_000,
  });
}

export function useLsegPortfolioSummary(forceRefresh = false) {
  return useQuery<LsegPortfolioSummary>({
    queryKey: ["lseg-credit", "portfolio-summary", forceRefresh],
    queryFn: async () => {
      const { data } = await api.get(
        `/api/lseg-credit/portfolio/summary?force_refresh=${forceRefresh}`
      );
      return data;
    },
    staleTime: 30 * 60_000,
  });
}
