// Goodie Hunter — 格式化函式
// 時間、參數摘要的人類可讀字串。

// ── Time formatting ──────────────────────────────────────────────
function fmtTime(d, now = window.SEED_NOW) {
  if (!(d instanceof Date)) d = new Date(d);
  const diffMin = Math.floor((now - d) / 60000);
  if (diffMin < 1) return '剛剛';
  if (diffMin < 60) return `${diffMin} 分鐘前`;
  const diffH = Math.floor(diffMin / 60);
  if (diffH < 24) return `${diffH} 小時前`;
  const diffD = Math.floor(diffH / 24);
  if (diffD === 1) return '昨天';
  if (diffD < 7) return `${diffD} 天前`;
  return `${d.getMonth()+1}/${d.getDate()}`;
}
function fmtClock(d) {
  if (!(d instanceof Date)) d = new Date(d);
  const h = d.getHours();
  const m = d.getMinutes().toString().padStart(2,'0');
  const ampm = h < 12 ? '上午' : '下午';
  const h12 = h % 12 || 12;
  return `${ampm} ${h12}:${m}`;
}
function fmtFuture(d, now = window.SEED_NOW) {
  if (!(d instanceof Date)) d = new Date(d);
  const diffMin = Math.floor((d - now) / 60000);
  if (diffMin < 0) return '已過期';
  if (diffMin < 60) return `${diffMin} 分鐘後`;
  const diffH = Math.floor(diffMin / 60);
  if (diffH < 24) return `${diffH} 小時後`;
  const diffD = Math.floor(diffH / 24);
  if (diffD === 1) return '明天';
  if (diffD < 30) return `${diffD} 天後`;
  const diffM = Math.floor(diffD / 30);
  return `${diffM} 個月後`;
}
window.fmtFuture = fmtFuture;


// ── Format param values for human reading ────────────────────────
function paramSummary(strategyId, params) {
  const s = window.STRATEGY_BY_ID[strategyId];
  if (!s) return '';
  switch (strategyId) {
    case 'pct_change': {
      const dir = params.direction === 'up' ? '↑' : params.direction === 'down' ? '↓' : '↕';
      const base = params.baseline === 'open' ? '開盤' : params.baseline === 'prev_close' ? '昨收' : '日內';
      return `${dir} ${params.pct}%（${base}）`;
    }
    case 'vwap': {
      const sess = params.session === 'day' ? '當日' : params.session === '5d' ? '5日' : '20日';
      const cross = params.cross === 'above' ? '上穿 ↑' : params.cross === 'below' ? '下穿 ↓' : '雙向 ↕';
      return `VWAP ${sess}・${cross}`;
    }
    case 'kd': {
      const ev = params.event === 'overbought' ? `K>${params.threshold} 超買`
               : params.event === 'oversold'   ? `K<${params.threshold} 超賣`
               : params.event === 'golden'     ? '黃金交叉'
               : '死亡交叉';
      return `KD(${params.period})・${ev}`;
    }
    case 'volume_above': {
      if (params.mode === 'absolute') return `量 > ${params.absolute.toLocaleString('en-US')}K 股`;
      return `${params.window}日均量 ${params.multiplier}×`;
    }
    default: return '';
  }
}
window.paramSummary = paramSummary;
window.fmtTime = fmtTime;
window.fmtClock = fmtClock;
