#!/usr/bin/env python3
"""mofin_collect.py — MoFin 数据采集链

每轮盯盘 cron 前运行，顺序执行：
  1. market_watch — 拉90个行业板块数据（9:30前跳过，市场未开）
  2. trend_detector — 检测17种信号（依赖板块数据，同跳）
  3. mofin_news — 搜新闻+小果分析
"""

import subprocess, sys, time
from pathlib import Path
from datetime import datetime

BASE = Path(__file__).parent.parent if "hermes" in str(Path(__file__).resolve()) else Path(__file__).parent

now = datetime.now()
market_open = (now.hour >= 9 and now.minute >= 30) or now.hour >= 10
# 9:30前不跑市场数据采集（同花顺页面无数据）
# 但仍然跑新闻采集（不依赖市场是否开盘）

SCRIPTS = []
if market_open:
    SCRIPTS.append(("market_watch.py", 60))
    SCRIPTS.append(("trend_detector.py", 60))
else:
    print(f"[{now.strftime('%H:%M')}] 市场未开盘(9:30)，跳过板块采集", flush=True)

SCRIPTS.append(("mofin_news.py", 50))

for script, timeout in SCRIPTS:
    path = BASE / script
    if not path.exists():
        path = Path("/home/hmo/MoFin") / script
    print(f"--- {script} ---", flush=True)
    start = time.time()
    try:
        result = subprocess.run(
            [sys.executable, str(path)],
            capture_output=True, text=True, timeout=timeout
        )
        elapsed = time.time() - start
        if result.returncode == 0:
            print(f"OK ({elapsed:.0f}s)", flush=True)
            if result.stdout.strip():
                for line in result.stdout.strip().split("\n")[-3:]:
                    print(f"  {line}", flush=True)
        else:
            print(f"FAIL ({elapsed:.0f}s): {result.stderr[:200]}", flush=True)
    except subprocess.TimeoutExpired:
        print(f"TIMEOUT ({timeout}s)", flush=True)
    except Exception as e:
        print(f"ERROR: {e}", flush=True)

print("采集链完成", flush=True)
