// ═══════════════════════════════════════════════════════════
//  指標設定 — 全站唯一的「資料字典」
//  每個指標都在這裡定義：要抓哪條 FRED 序列、怎麼換算、
//  中文名、是否為「反向指標」（數字越高越糟），以及給初學者
//  看的三段式解釋（這是什麼 / 怎麼看 / 對市場影響）。
//
//  欄位說明：
//   - group        所屬分組（對應下方 GROUPS）
//   - label        中文主標題
//   - labelEn      英文副標（保留對照）
//   - source       'fred' 或 'stooq'
//   - seriesId     FRED 序列代碼（source=fred 時）
//   - symbol       Stooq 代碼（source=stooq 時）
//   - transform    換算方式（見 lib/fred.js 的 computeMetric）
//   - periodsPerYear  做 YoY 時，一年有幾期（月=12、季=4、週=52）
//   - format       顯示格式（見 lib/fred.js 的 formatValue）
//   - decimals     小數位數
//   - inverted     true = 反向指標（數字越高代表越糟，例如失業率、VIX）
//   - excludeFromScore  true = 不納入總體健康分數（中性或方向不明確者）
//   - substitute   若為免費替代指標，放原本想要的名稱（會在畫面標示）
//   - tip          三段式解釋 + 資料來源與更新頻率
// ═══════════════════════════════════════════════════════════

// 分組（依「故事線」排序：利率 → 通膨 → 就業 → 成長 → 貨幣信用 → 市場反應）
export const GROUPS = [
  {
    key: 'rates',
    title: '利率 & 殖利率',
    titleEn: 'Interest Rates & Yield Curve',
    icon: '$',
    colorKey: 'blue',
    intro: '一切的起點。央行（聯準會）的利率決定了整個經濟「借錢的成本」。利率高，企業與家庭就少借錢、少消費，經濟降溫；利率低則相反。先看這裡，後面的通膨、就業、市場都是它的連鎖反應。',
  },
  {
    key: 'inflation',
    title: '通膨指標',
    titleEn: 'Inflation Indicators',
    icon: '\uD83D\uDCC8',
    colorKey: 'yellow',
    intro: '聯準會升降息，最主要就是為了「控制物價」。這裡看物價漲多快——數字越接近 2%（聯準會目標）越健康；太高代表生活變貴、可能還要再升息，太低（甚至負的）則代表經濟可能太冷。',
  },
  {
    key: 'labor',
    title: '勞動市場',
    titleEn: 'Labor Market',
    icon: '\uD83D\uDCBC',
    colorKey: 'green',
    intro: '有沒有工作、薪水漲不漲，直接影響大家敢不敢消費。就業強勁通常是好事，但「太強」會推升薪資與物價，讓聯準會更難降息。觀察就業是否從高峰開始降溫，是判斷景氣轉折的關鍵。',
  },
  {
    key: 'growth',
    title: '景氣成長',
    titleEn: 'Economic Growth',
    icon: '\uD83D\uDCC9',
    colorKey: 'purple',
    intro: '把前面的利率、通膨、就業加總起來，整體經濟到底在擴張還是收縮？這組是「成績單」，也包含幾個能提早預警衰退的領先指標。',
  },
  {
    key: 'money',
    title: '貨幣 & 信用',
    titleEn: 'Money Supply & Credit',
    icon: '\uD83C\uDFE6',
    colorKey: 'orange',
    intro: '市場上的錢多不多、好不好借？資金寬鬆時資產容易上漲，資金緊縮（信用利差擴大）往往是市場壓力的早期訊號。這組看的是金融體系的「血液循環」。',
  },
  {
    key: 'sentiment',
    title: '市場情緒 & 大宗商品',
    titleEn: 'Markets & Commodities',
    icon: '\uD83D\uDCCA',
    colorKey: 'red',
    intro: '最後是市場的即時反應。股市、波動率、美元與大宗商品價格，反映投資人此刻是貪婪還是恐懼，也是前面所有總經訊號的「綜合投票結果」。',
  },
];

export const INDICATORS = [
  // ───────────── 利率 & 殖利率 ─────────────
  {
    key: 'fed_funds', group: 'rates',
    label: '聯邦基金利率', labelEn: 'Fed Funds Rate (upper)',
    source: 'fred', seriesId: 'DFEDTARU',
    transform: 'level', format: 'pct', decimals: 2, inverted: false, excludeFromScore: true,
    tip: {
      what: '聯準會（Fed）設定的政策利率目標區間上緣，是所有市場利率的源頭。',
      how: '升息代表央行想替過熱經濟與通膨降溫；降息代表想刺激經濟。本身無絕對好壞。',
      impact: '利率走向幾乎左右所有資產價格，是看總經的第一個錨點。',
      source: 'FRED · DFEDTARU', freq: '隨 FOMC 會議調整',
    },
  },
  {
    key: 'treasury_10y', group: 'rates',
    label: '10 年期公債殖利率', labelEn: '10Y Treasury Yield',
    source: 'fred', seriesId: 'DGS10',
    transform: 'level', format: 'pct', decimals: 2, inverted: false, excludeFromScore: true,
    tip: {
      what: '美國 10 年期公債的市場殖利率，是全球長期利率的基準。',
      how: '反映市場對長期成長與通膨的預期；上升代表資金成本變高。',
      impact: '房貸、企業借貸、股票評價都以它為定價基準。',
      source: 'FRED · DGS10', freq: '每日',
    },
  },
  {
    key: 'treasury_2y', group: 'rates',
    label: '2 年期公債殖利率', labelEn: '2Y Treasury Yield',
    source: 'fred', seriesId: 'DGS2',
    transform: 'level', format: 'pct', decimals: 2, inverted: false, excludeFromScore: true,
    tip: {
      what: '美國 2 年期公債殖利率，對「短期升降息預期」最敏感。',
      how: '通常貼近市場對未來一兩年聯準會利率的看法。',
      impact: '與 10 年期相比可看出殖利率曲線是否倒掛（見下方）。',
      source: 'FRED · DGS2', freq: '每日',
    },
  },
  {
    key: 'yield_spread', group: 'rates',
    label: '10年-2年利差', labelEn: '10Y-2Y Spread',
    source: 'fred', seriesId: 'T10Y2Y',
    transform: 'percent_to_bp', format: 'bp', decimals: 0, inverted: true,
    tip: {
      what: '長天期（10年）減短天期（2年）殖利率的差距，單位是基點（bp）。',
      how: '正常為正值；一旦變負（倒掛）代表短率高於長率，歷史上常是衰退前兆。',
      impact: '反向指標：數字越低/負越值得警惕，這是最受關注的衰退訊號之一。',
      source: 'FRED · T10Y2Y', freq: '每日',
    },
  },
  {
    key: 'real_rate', group: 'rates',
    label: '10年期實質利率', labelEn: 'Real Rate (10Y TIPS)',
    source: 'fred', seriesId: 'DFII10',
    transform: 'level', format: 'pct', decimals: 2, inverted: false, excludeFromScore: true,
    tip: {
      what: '扣掉通膨預期後的「真實」10年利率（以抗通膨債 TIPS 衡量）。',
      how: '實質利率越高，持有黃金、成長股等不孳息資產的機會成本越高。',
      impact: '是黃金與高估值科技股的重要逆風/順風指標。',
      source: 'FRED · DFII10', freq: '每日',
    },
  },
  {
    key: 'sofr', group: 'rates',
    label: '擔保隔夜融資利率', labelEn: 'SOFR',
    source: 'fred', seriesId: 'SOFR',
    transform: 'level', format: 'pct', decimals: 2, inverted: false, excludeFromScore: true,
    tip: {
      what: '美國銀行間隔夜借錢的基準利率，已取代舊的 Libor。',
      how: '通常緊貼聯邦基金利率；若突然跳動，代表短期資金市場有壓力。',
      impact: '大量浮動利率貸款與衍生性商品都以它計價。',
      source: 'FRED · SOFR', freq: '每日',
    },
  },

  // ───────────── 通膨 ─────────────
  {
    key: 'cpi', group: 'inflation',
    label: '消費者物價指數 (年增)', labelEn: 'CPI YoY',
    source: 'fred', seriesId: 'CPIAUCSL',
    transform: 'yoy', periodsPerYear: 12, format: 'pct', decimals: 2, inverted: true,
    tip: {
      what: '一籃子日常商品與服務的價格，與一年前相比漲了多少（年增率）。',
      how: '聯準會目標約 2%。越高代表生活越貴、可能還要升息。',
      impact: '反向指標：太高是警訊；數字下降（降溫）通常對股債友善。',
      source: 'FRED · CPIAUCSL', freq: '每月',
    },
  },
  {
    key: 'core_cpi', group: 'inflation',
    label: '核心 CPI (年增)', labelEn: 'Core CPI YoY',
    source: 'fred', seriesId: 'CPILFESL',
    transform: 'yoy', periodsPerYear: 12, format: 'pct', decimals: 2, inverted: true,
    tip: {
      what: 'CPI 扣掉波動劇烈的食品與能源，更能看出物價的「底層趨勢」。',
      how: '比整體 CPI 更黏、降得更慢，是聯準會緊盯的數字。',
      impact: '反向指標：核心通膨遲遲不降，降息就會延後。',
      source: 'FRED · CPILFESL', freq: '每月',
    },
  },
  {
    key: 'ppi', group: 'inflation',
    label: '生產者物價指數 (年增)', labelEn: 'PPI YoY',
    source: 'fred', seriesId: 'PPIFIS',
    transform: 'yoy', periodsPerYear: 12, format: 'pct', decimals: 2, inverted: true,
    tip: {
      what: '生產端（工廠出廠）的物價年增率，常領先消費者端的 CPI。',
      how: '生產成本上升，之後往往會轉嫁到消費者價格。',
      impact: '反向指標：可當成 CPI 的「上游預警」。',
      source: 'FRED · PPIFIS', freq: '每月',
    },
  },
  {
    key: 'pce', group: 'inflation',
    label: '核心 PCE (年增)', labelEn: 'Core PCE YoY',
    source: 'fred', seriesId: 'PCEPILFE',
    transform: 'yoy', periodsPerYear: 12, format: 'pct', decimals: 2, inverted: true,
    tip: {
      what: '聯準會「最偏好」的通膨指標——核心個人消費支出物價。',
      how: '聯準會的 2% 目標其實是看這個數字，重要性高於 CPI。',
      impact: '反向指標：這個數字往 2% 靠近，是降息的關鍵前提。',
      source: 'FRED · PCEPILFE', freq: '每月',
    },
  },
  {
    key: 'breakeven', group: 'inflation',
    label: '5年通膨預期', labelEn: '5Y Breakeven Inflation',
    source: 'fred', seriesId: 'T5YIE',
    transform: 'level', format: 'pct', decimals: 2, inverted: true,
    tip: {
      what: '市場（債券交易者）預期未來 5 年的平均通膨率。',
      how: '反映「市場相不相信通膨會被控制住」；脫錨上升是大麻煩。',
      impact: '反向指標：穩定在 2% 附近代表預期良好；飆高代表信心動搖。',
      source: 'FRED · T5YIE', freq: '每日',
    },
  },

  // ───────────── 勞動市場 ─────────────
  {
    key: 'unemployment', group: 'labor',
    label: '失業率', labelEn: 'Unemployment Rate',
    source: 'fred', seriesId: 'UNRATE',
    transform: 'level', format: 'pct', decimals: 2, inverted: true,
    tip: {
      what: '想工作但找不到工作的人口比例。',
      how: '低代表就業市場熱絡；但若從低點開始快速上升，常是衰退啟動的訊號。',
      impact: '反向指標：上升是警訊（可參考 Sahm 法則：升幅過快即衰退）。',
      source: 'FRED · UNRATE', freq: '每月',
    },
  },
  {
    key: 'nfp', group: 'labor',
    label: '非農就業 (月增)', labelEn: 'Nonfarm Payrolls (MoM)',
    source: 'fred', seriesId: 'PAYEMS',
    transform: 'payems_diff', format: 'k_signed', decimals: 0, inverted: false,
    tip: {
      what: '排除農業後，當月新增的工作數（千人）。最受市場關注的就業數據。',
      how: '正數且穩健代表經濟在創造就業；急速放緩代表動能轉弱。',
      impact: '每月公布時常引發股債大幅波動。',
      source: 'FRED · PAYEMS（取月變動）', freq: '每月',
    },
  },
  {
    key: 'claims', group: 'labor',
    label: '初領失業金人數', labelEn: 'Initial Jobless Claims',
    source: 'fred', seriesId: 'ICSA',
    transform: 'level_per_thousand', format: 'k', decimals: 0, inverted: true,
    tip: {
      what: '每週第一次申請失業救濟的人數（千人），是最即時的就業溫度計。',
      how: '低且平穩代表裁員少；持續攀升代表勞動市場開始惡化。',
      impact: '反向指標：因為每週公布，比月報更早反映轉折。',
      source: 'FRED · ICSA', freq: '每週',
    },
  },
  {
    key: 'wages', group: 'labor',
    label: '平均時薪 (年增)', labelEn: 'Avg Hourly Earnings YoY',
    source: 'fred', seriesId: 'CES0500000003',
    transform: 'yoy', periodsPerYear: 12, format: 'pct', decimals: 2, inverted: false, excludeFromScore: true,
    tip: {
      what: '民間部門平均時薪與一年前相比的漲幅。',
      how: '對勞工是好事，但漲太快會推升物價（薪資-通膨螺旋），讓聯準會緊張。',
      impact: '方向解讀較中性：需搭配通膨一起看，故不計入總分。',
      source: 'FRED · CES0500000003', freq: '每月',
    },
  },

  // ───────────── 景氣成長 ─────────────
  {
    key: 'gdp', group: 'growth',
    label: '實質 GDP (年增)', labelEn: 'Real GDP YoY',
    source: 'fred', seriesId: 'GDPC1',
    transform: 'yoy', periodsPerYear: 4, format: 'pct', decimals: 2, inverted: false,
    tip: {
      what: '經通膨調整後的經濟總產出，與一年前相比的成長率。',
      how: '正成長代表經濟擴張；連兩季萎縮常被視為技術性衰退。',
      impact: '是經濟整體健康最根本的「成績單」。',
      source: 'FRED · GDPC1（取年增）', freq: '每季',
    },
  },
  {
    key: 'mfg', group: 'growth',
    label: '製造業景氣', labelEn: 'Mfg Activity (Philly Fed)',
    source: 'fred', seriesId: 'GACDFSA066MSFRBPHI',
    transform: 'level', format: 'num1', decimals: 1, inverted: false,
    substitute: 'ISM 製造業 PMI',
    tip: {
      what: '費城聯儲製造業景氣調查（擴散指數），用來替代需付費的 ISM 製造業 PMI。',
      how: '大於 0 代表製造業在擴張，小於 0 代表收縮。',
      impact: '替代指標：製造業常領先整體景氣，是循環的風向球。',
      source: 'FRED · GACDFSA066MSFRBPHI', freq: '每月',
    },
  },
  {
    key: 'indpro', group: 'growth',
    label: '工業生產 (年增)', labelEn: 'Industrial Production YoY',
    source: 'fred', seriesId: 'INDPRO',
    transform: 'yoy', periodsPerYear: 12, format: 'pct', decimals: 2, inverted: false,
    tip: {
      what: '工廠、礦業與公用事業的實際產出，與一年前相比。',
      how: '正成長代表實體生產活絡；轉負代表工業部門走弱。',
      impact: '與製造業景氣互相印證實體經濟的力道。',
      source: 'FRED · INDPRO（取年增）', freq: '每月',
    },
  },
  {
    key: 'sentiment_consumer', group: 'growth',
    label: '消費者信心', labelEn: 'Consumer Sentiment (UMich)',
    source: 'fred', seriesId: 'UMCSENT',
    transform: 'level', format: 'num1', decimals: 1, inverted: false,
    substitute: '世界大型企業聯合會 CCI',
    tip: {
      what: '密西根大學消費者信心指數，用來替代需付費的世界大型企業聯合會 CCI。',
      how: '數字越高代表民眾對經濟與荷包越有信心，越敢消費。',
      impact: '替代指標：消費占美國經濟約七成，信心是重要前瞻訊號。',
      source: 'FRED · UMCSENT', freq: '每月',
    },
  },
  {
    key: 'retail', group: 'growth',
    label: '零售銷售 (月增)', labelEn: 'Retail Sales (MoM)',
    source: 'fred', seriesId: 'RSAFS',
    transform: 'mom', format: 'pct_signed', decimals: 1, inverted: false,
    tip: {
      what: '零售與餐飲銷售額與上月相比的變化，直接反映消費力道。',
      how: '正成長代表民眾持續花錢；轉負代表消費降溫。',
      impact: '消費是經濟主引擎，這是它的即時脈搏。',
      source: 'FRED · RSAFS（取月增）', freq: '每月',
    },
  },
  {
    key: 'recession_prob', group: 'growth',
    label: '衰退機率 (殖利率模型)', labelEn: 'Recession Probability',
    source: 'fred', seriesId: 'RECPROUSM156N',
    transform: 'level', format: 'pct', decimals: 1, inverted: true,
    substitute: '領先指標 LEI',
    tip: {
      what: '紐約聯儲依殖利率曲線推估「未來 12 個月內衰退」的機率，替代需付費的 LEI 領先指標。',
      how: '數字越高代表模型認為衰退風險越大；超過 30% 通常值得警戒。',
      impact: '反向指標（替代）：是純數據、無情緒的前瞻衰退訊號。',
      source: 'FRED · RECPROUSM156N', freq: '每月',
    },
  },

  // ───────────── 貨幣 & 信用 ─────────────
  {
    key: 'm2', group: 'money',
    label: 'M2 貨幣供給 (年增)', labelEn: 'M2 Money Supply YoY',
    source: 'fred', seriesId: 'M2SL',
    transform: 'yoy', periodsPerYear: 12, format: 'pct', decimals: 2, inverted: false,
    tip: {
      what: '市場上流通的廣義貨幣（現金+存款）與一年前相比的變化。',
      how: '正成長代表流動性增加；負成長（罕見）代表錢在收縮。',
      impact: '流動性是資產價格的潤滑劑，過去與股市關聯密切。',
      source: 'FRED · M2SL（取年增）', freq: '每月',
    },
  },
  {
    key: 'credit_spread', group: 'money',
    label: '高收益債信用利差', labelEn: 'High-Yield OAS',
    source: 'fred', seriesId: 'BAMLH0A0HYM2',
    transform: 'percent_to_bp', format: 'bp', decimals: 0, inverted: true,
    tip: {
      what: '高收益（垃圾）債相對公債的額外利率補償，單位基點（bp）。',
      how: '利差小代表市場願意承擔風險；急速擴大代表恐慌、信用收緊。',
      impact: '反向指標：擴大是金融壓力的早期且靈敏的訊號。',
      source: 'FRED · BAMLH0A0HYM2', freq: '每日',
    },
  },
  {
    key: 'fin_cond', group: 'money',
    label: '金融條件指數', labelEn: 'Financial Conditions (NFCI)',
    source: 'fred', seriesId: 'NFCI',
    transform: 'level', format: 'num2_signed', decimals: 2, inverted: true,
    tip: {
      what: '芝加哥聯儲綜合衡量整體金融鬆緊的指數（NFCI）。',
      how: '注意：正值代表比平均「更緊」，負值代表「更寬鬆」（與直覺相反）。',
      impact: '反向指標：數字上升代表金融環境收緊，對風險資產不利。',
      source: 'FRED · NFCI', freq: '每週',
    },
  },
  {
    key: 'fed_balance', group: 'money',
    label: '聯準會資產負債表', labelEn: 'Fed Balance Sheet',
    source: 'fred', seriesId: 'WALCL',
    transform: 'millions_to_trillions', format: 'trillions', decimals: 2, inverted: false, excludeFromScore: true,
    tip: {
      what: '聯準會持有的資產總額（兆美元）。擴張=QE 印鈔，收縮=QT 縮表。',
      how: '上升代表向市場注入流動性，下降代表抽走流動性。',
      impact: '是判斷央行「鬆或緊」的直接量化證據，方向中性故不計分。',
      source: 'FRED · WALCL', freq: '每週',
    },
  },

  // ───────────── 市場情緒 & 大宗商品 ─────────────
  {
    key: 'vix', group: 'sentiment',
    label: 'VIX 恐慌指數', labelEn: 'VIX',
    source: 'fred', seriesId: 'VIXCLS',
    transform: 'level', format: 'num1', decimals: 1, inverted: true,
    tip: {
      what: '市場對未來 30 天股市波動的預期，俗稱「恐慌指數」。',
      how: '一般低於 20 代表平靜；飆高（>30）代表市場恐慌。',
      impact: '反向指標：低=自滿、高=恐慌，常與股市反向。',
      source: 'FRED · VIXCLS', freq: '每日',
    },
  },
  {
    key: 'dxy', group: 'sentiment',
    label: '美元指數 (廣義)', labelEn: 'Broad USD Index',
    source: 'fred', seriesId: 'DTWEXBGS',
    transform: 'level', format: 'num1', decimals: 1, inverted: false, excludeFromScore: true,
    tip: {
      what: '美元對一籃子貿易夥伴貨幣的強弱（聯準會廣義美元指數）。',
      how: '走強通常代表避險或美國相對強勁；走弱有利新興市場與大宗商品。',
      impact: '方向中性：影響跨資產但無絕對好壞，故不計分。',
      source: 'FRED · DTWEXBGS', freq: '每日',
    },
  },
  {
    key: 'oil', group: 'sentiment',
    label: '西德州原油 (WTI)', labelEn: 'WTI Crude Oil',
    source: 'fred', seriesId: 'DCOILWTICO',
    transform: 'level', format: 'usd', decimals: 1, inverted: false, excludeFromScore: true,
    tip: {
      what: '西德州中質原油價格（美元/桶）。',
      how: '反映能源需求與地緣風險；油價飆漲會推升通膨。',
      impact: '方向中性：是成長與通膨的雙面刃，故不計分。',
      source: 'FRED · DCOILWTICO', freq: '每日',
    },
  },
  {
    key: 'gold', group: 'sentiment',
    label: '黃金', labelEn: 'Gold Futures (GC=F)',
    source: 'yahoo', symbol: 'GC=F',
    transform: 'level', format: 'usd0', decimals: 0, inverted: false, excludeFromScore: true,
    tip: {
      what: '黃金期貨價格（美元/盎司），經典的避險與抗通膨資產。',
      how: '在恐慌、低實質利率或美元走弱時通常上漲。',
      impact: '方向中性：作為避險溫度計參考，故不計分。',
      source: 'Yahoo Finance · GC=F', freq: '每日',
    },
  },
  {
    key: 'copper', group: 'sentiment',
    label: '銅價', labelEn: 'Copper (USD/tonne)',
    source: 'fred', seriesId: 'PCOPPUSDM',
    transform: 'level', format: 'usd0', decimals: 0, inverted: false, excludeFromScore: true,
    tip: {
      what: '全球銅價（美元/公噸）。因廣泛用於工業，被稱為「銅博士」。',
      how: '上漲常代表全球製造與建設需求強，是景氣的風向球。',
      impact: '方向中性：作為成長動能參考，故不計分。',
      source: 'FRED · PCOPPUSDM', freq: '每月',
    },
  },
  {
    key: 'sp500', group: 'sentiment',
    label: 'S&P 500 指數', labelEn: 'S&P 500',
    source: 'fred', seriesId: 'SP500',
    transform: 'level', format: 'num0', decimals: 0, inverted: false, excludeFromScore: true,
    tip: {
      what: '美國 500 大企業股價指數，最具代表性的股市基準。',
      how: '上漲反映市場樂觀；它是所有總經訊號的「綜合投票結果」。',
      impact: '方向中性（本身即市場）：故不計入總經健康分數。',
      source: 'FRED · SP500', freq: '每日',
    },
  },
];

// 方便用 key 取得設定
export const INDICATOR_MAP = Object.fromEntries(INDICATORS.map((i) => [i.key, i]));
