"use client";

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

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

export interface PeerCurveUniverseOAS {
  issuer: number | null;
  rating_peers: number | null;
  sector: number | null;
  sub_sector: number | null;
  rating_sector: number | null;
  rating_sub_sector: number | null;
  lower_rating_sub_sector: number | null;
}

export interface PeerCurveChartRow {
  bucket: string;
  issuer: number | null;
  rating_peers: number | null;
  sector: number | null;
  sub_sector: number | null;
  rating_sector: number | null;
  rating_sub_sector: number | null;
  lower_rating_sub_sector: number | null;
}

export interface PeerCurveResponse {
  issuer: string;
  sector: string | null;
  sub_sector: string | null;
  rating_bucket: string | null;
  rating_peer_buckets: string[];
  lower_rating_bucket: string | null;
  table: Record<string, PeerCurveUniverseOAS>;
  bond_counts: Record<string, number>;
  chart_data: PeerCurveChartRow[];
  spread_source: string;
}

export const MATURITY_BUCKET_ORDER = ["<1yr", "2yr", "5yr", "10yr", "20yr", "30yr+", "All"];

export const UNIVERSE_CONFIG: Record<
  keyof PeerCurveUniverseOAS,
  { label: string; color: string; shortLabel: string; dashed?: boolean }
> = {
  issuer:                  { label: "Selected Issuer",           shortLabel: "Issuer",          color: "#ffffff" },
  rating_peers:            { label: "Rating Peer Group",         shortLabel: "Rating Peers",    color: "#4a9eff" },
  sector:                  { label: "Sector",                    shortLabel: "Sector",          color: "#e879f9" },
  sub_sector:              { label: "Sub-Sector",                shortLabel: "Sub-Sector",      color: "#f97316" },
  rating_sector:           { label: "Rating + Sector",           shortLabel: "Rtg + Sector",    color: "#06b6d4" },
  rating_sub_sector:       { label: "Rating + Sub-Sector",       shortLabel: "Rtg + Sub-Sec",   color: "#22c55e" },
  lower_rating_sub_sector: { label: "Lower Rating + Sub-Sector", shortLabel: "Lower Rtg + Sub", color: "#eab308", dashed: true },
};

export function getColumnLabels(data: PeerCurveResponse): Record<UniverseKey, string> {
  const ratingStr = data.rating_peer_buckets.join("/") || data.rating_bucket || "";
  const sector    = data.sector     ?? "Sector";
  const sub       = data.sub_sector ?? "Sub-Sector";
  const lower     = data.lower_rating_bucket ?? "";

  return {
    issuer:                  `${data.issuer} Bonds`,
    rating_peers:            ratingStr ? `All ${ratingStr} Rated`         : "Rating Peers",
    sector,
    sub_sector:              sub,
    rating_sector:           ratingStr ? `${ratingStr} and ${sector}`     : sector,
    rating_sub_sector:       ratingStr ? `${ratingStr} and ${sub}`        : sub,
    lower_rating_sub_sector: lower     ? `${lower} and ${sub}`            : `Lower and ${sub}`,
  };
}

export type UniverseKey = keyof PeerCurveUniverseOAS;
export const UNIVERSE_KEYS = Object.keys(UNIVERSE_CONFIG) as UniverseKey[];

// ── Hook ──────────────────────────────────────────────────────────────────────

export function usePeerCurve(issuer: string) {
  return useQuery<PeerCurveResponse>({
    queryKey: ["peer-curve", issuer],
    queryFn: async () => {
      const { data } = await api.get(
        `/api/lseg-credit/peer-curve?issuer=${encodeURIComponent(issuer)}`
      );
      return data;
    },
    enabled: !!issuer,
    staleTime: 30 * 60_000,
    retry: 1,
  });
}

// ── Issuer input state helper ─────────────────────────────────────────────────

export function useIssuerInput() {
  const [draft, setDraft]   = useState("");
  const [active, setActive] = useState("");

  function submit() {
    const trimmed = draft.trim();
    if (trimmed) setActive(trimmed);
  }

  return { draft, setDraft, active, submit };
}
