import Link from "next/link";
import { Breadcrumb, PageShell } from "@/components/SiteHeader";
import { strategyGroups, strategyLibraryAsOf, strategyLibrarySummary, type StrategyGroup, type StrategyRecord } from "@/lib/strategy-library";

export const metadata = { title: "策略库" };

const percent = (value: number | null) => value === null ? "不可计算" : `${value > 0 ? "+" : ""}${(value * 100).toFixed(2)}%`;
const number = (value: number | null) => value === null ? "—" : value.toFixed(2);
const metricClass = (value: number | null) => value === null || value === 0 ? "" : value > 0 ? "positive" : "negative";
const statusCopy = { CHAMPION: "正式策略", CHALLENGER: "研究候选", REJECTED: "已拒绝", DATA_GATED: "数据不足" } as const;

function historicalResult(strategy: StrategyRecord) {
  if (strategy.finalHoldoutReturn !== null) return { value: strategy.finalHoldoutReturn, basis: "最终留出累计" };
  if (strategy.validationReturn !== null) return { value: strategy.validationReturn, basis: "验证 / 样本外汇总" };
  if (strategy.fullResearchReturn !== null) return { value: strategy.fullResearchReturn, basis: "全研究区间累计" };
  return { value: null, basis: "缺少合格历史回放" };
}

function bestAudited(group: StrategyGroup) {
  return group.strategies
    .filter((strategy) => strategy.status !== "REJECTED" && strategy.finalHoldoutReturn !== null)
    .sort((a, b) => (b.finalHoldoutReturn ?? -Infinity) - (a.finalHoldoutReturn ?? -Infinity))[0] ?? null;
}

export default function StrategiesPage() {
  const strategies = strategyGroups.flatMap((group) => group.strategies.map((strategy) => ({ group, strategy })));

  return <PageShell>
    <Breadcrumb items={[{ label: "首页", href: "/" }, { label: "策略库" }]} />

    <section className="strategy-answer-hero">
      <div>
        <span>STRATEGY LIBRARY / QUICK ANSWER</span>
        <h1>策略库</h1>
        <p>先看策略和历史回测收益；回撤、Sharpe、样本限制和原始证据需要时再展开。</p>
      </div>
      <aside><b>数据截至 {strategyLibraryAsOf}</b><small>回测 / 研究 / 影子结果 · 真实订单 0</small></aside>
    </section>

    <section className="strategy-ten-second" aria-labelledby="ten-second-title">
      <header><span>10 SECOND ANSWER</span><h2 id="ten-second-title">10秒结论</h2></header>
      <div>
        {strategyGroups.map((group) => <AssetAnswer group={group} key={group.id} />)}
      </div>
    </section>

    <section className="strategy-return-board" aria-labelledby="return-board-title">
      <header>
        <div><span>30 SECOND ANSWER</span><h2 id="return-board-title">全部策略与历史回测收益</h2></div>
        <p><i className="positive">绿色为正</i><i className="negative">红色为负</i><i>不可计算不是0%</i></p>
      </header>
      <div className="strategy-return-table-wrap">
        <table className="strategy-return-table">
          <thead><tr><th>资产</th><th>策略</th><th>定位</th><th>历史回测累计收益</th><th>收益口径 / 区间</th><th>一句话结论</th></tr></thead>
          <tbody>
            {strategies.map(({ group, strategy }) => {
              const result = historicalResult(strategy);
              return <tr key={strategy.id}>
                <td data-label="资产"><b>{group.title.replace("策略", "")}</b><small>{group.kicker}</small></td>
                <td data-label="策略"><strong>{strategy.name}</strong><small>{strategy.id}</small></td>
                <td data-label="定位"><em className={`table-status status-${strategy.status.toLowerCase()}`}>{statusCopy[strategy.status]}</em></td>
                <td data-label="历史收益"><b className={`table-return ${metricClass(result.value)}`}>{percent(result.value)}</b><small>{result.basis}</small></td>
                <td data-label="口径"><span>{strategy.period}</span></td>
                <td data-label="结论"><span>{strategy.verdict}</span></td>
              </tr>;
            })}
          </tbody>
        </table>
      </div>
      <footer><b>阅读规则</b><span>优先比较“最终留出累计”；验证期和全研究区间仅作补充。日频与分钟策略、不同资产制度不能直接排名。</span></footer>
    </section>

    <section className="strategy-detail-library" aria-labelledby="detail-library-title">
      <header><span>DETAILS ON DEMAND</span><h2 id="detail-library-title">需要时再展开详细证据</h2></header>
      {strategyGroups.map((group) => <details key={group.id}>
        <summary><span>{group.title}</span><small>回撤、Sharpe、成交、样本边界与证据</small><b>展开 +</b></summary>
        <div className="strategy-detail-head"><p>{group.optimization}</p><Link href={group.accountHref}>打开独立账户 →</Link></div>
        <div className="strategy-card-grid">
          {group.strategies.map((strategy) => <StrategyCard strategy={strategy} key={strategy.id} />)}
        </div>
      </details>)}
    </section>

    <section className="strategy-quick-governance">
      <b>不会为制造高收益而隐藏失败结果</b>
      <span>Champion盘中冻结 · Challenger不自动晋级 · 可转债数据不足时不伪造收益</span>
    </section>
  </PageShell>;
}

function AssetAnswer({ group }: { group: StrategyGroup }) {
  const champion = group.strategies.find((strategy) => strategy.status === "CHAMPION") ?? group.strategies[0];
  const best = bestAudited(group);
  return <article className={`asset-answer asset-${group.id}`}>
    <header><div><span>{group.kicker}</span><h3>{group.title}</h3></div><b>{group.strategies.length}套</b></header>
    <dl>
      <div><dt>当前策略</dt><dd>{champion.name}</dd></div>
      <div><dt>当前策略历史收益</dt><dd className={metricClass(historicalResult(champion).value)}>{percent(historicalResult(champion).value)}</dd></div>
      <div><dt>历史最佳可审计候选</dt><dd>{best ? best.name : "暂无"}</dd></div>
    </dl>
    <div className="asset-answer-return"><span>最佳最终留出累计</span><b className={metricClass(best?.finalHoldoutReturn ?? null)}>{percent(best?.finalHoldoutReturn ?? null)}</b></div>
  </article>;
}

function StrategyCard({ strategy }: { strategy: StrategyRecord }) {
  return <article className={`strategy-card status-${strategy.status.toLowerCase()}`}>
    <header>
      <div><span>{strategy.id}</span><h3>{strategy.name}</h3></div>
      <em>{strategy.status}</em>
    </header>
    <p>{strategy.summary}</p>
    <div className="strategy-primary-return">
      <span>最终留出累计收益</span>
      <b className={metricClass(strategy.finalHoldoutReturn)}>{percent(strategy.finalHoldoutReturn)}</b>
      <small>{strategy.period}</small>
    </div>
    <dl>
      <div><dt>验证期累计</dt><dd className={metricClass(strategy.validationReturn)}>{percent(strategy.validationReturn)}</dd></div>
      <div><dt>最终留出年化</dt><dd className={metricClass(strategy.finalAnnualizedReturn)}>{percent(strategy.finalAnnualizedReturn)}</dd></div>
      <div><dt>最终留出最大回撤</dt><dd className={metricClass(strategy.finalMaxDrawdown)}>{percent(strategy.finalMaxDrawdown)}</dd></div>
      <div><dt>最终留出 Sharpe</dt><dd>{number(strategy.finalSharpe)}</dd></div>
      <div><dt>全研究区间累计</dt><dd className={metricClass(strategy.fullResearchReturn)}>{percent(strategy.fullResearchReturn)}</dd></div>
      <div><dt>最终留出成交</dt><dd>{strategy.finalTrades === null ? "—" : `${strategy.finalTrades} 笔`}</dd></div>
    </dl>
    <div className="strategy-data-scope"><span>样本与边界</span><p>{strategy.universe}</p></div>
    <footer><p>{strategy.verdict}</p><a href={strategy.evidenceHref}>查看完整证据 →</a></footer>
  </article>;
}
