#!/usr/bin/env python3
"""
台股投研晨報生成 (DIKW Layer I+K - 用 Sonnet 4)
"""
import json
import yaml
import os
from datetime import datetime
from anthropic import Anthropic

def load_market_data():
    """載入今日收集的市場數據"""
    today = datetime.now().strftime('%Y-%m-%d')
    data_file = f"data/market-data/raw-{today}.json"
    
    try:
        with open(data_file, 'r', encoding='utf-8') as f:
            return json.load(f)
    except FileNotFoundError:
        print(f"找不到數據檔案: {data_file}")
        return {"stocks": {}}

def load_watchlist_scores():
    """載入觀察名單評分卡"""
    scores = {}
    watchlist_dir = "watchlist"
    
    for filename in os.listdir(watchlist_dir):
        if filename.endswith('.yml'):
            with open(os.path.join(watchlist_dir, filename), 'r', encoding='utf-8') as f:
                stock_data = yaml.safe_load(f)
                ticker = stock_data['ticker'].replace('TW-', '')
                scores[ticker] = stock_data
    
    return scores

def generate_briefing_with_ai(market_data, scores):
    """使用 Anthropic Sonnet 4 生成晨報"""
    client = Anthropic(api_key=os.getenv('ANTHROPIC_API_KEY'))
    
    prompt = f"""
你是台股投研助理 Celia。根據以下數據生成今日晨報：

## 市場數據
{json.dumps(market_data, ensure_ascii=False, indent=2)}

## 觀察名單評分 (取樣)
{json.dumps({k:v for k,v in list(scores.items())[:5]}, ensure_ascii=False, indent=2)}

請生成格式化的晨報，包含：

1. **變動優先 Top 5** (根據新聞判斷可能有變動的股票)
2. **產業觀察** (AI伺服器、半導體設備、記憶體、能源)
3. **今日關注點** (值得留意的事件或數據)

格式：
```
# 台股投研晨報 {datetime.now().strftime('%Y-%m-%d')}

## 變動優先 Top 5
1) XXXX 公司 | 產業 | 總分 XX | Δ 變動
   - 變動原因：...
   - 觸發：...
   - 觀察點：...

## 產業觀察
- AI伺服器：...
- 半導體設備：...

## 回覆指令
回覆 1/2/3 獲得建議：
- 1: 建議稿 (具體操作建議)
- 2: 大綱 (結構化分析)  
- 3: 推演框架 (情境分析)
```

請用專業投研語調，簡潔有力。
"""

    try:
        response = client.messages.create(
            model="claude-3-5-sonnet-20241022",
            max_tokens=2000,
            messages=[{"role": "user", "content": prompt}]
        )
        
        return response.content[0].text
        
    except Exception as e:
        print(f"AI 生成失敗: {e}")
        # 備用方案：基本格式晨報
        return generate_basic_briefing(market_data, scores)

def generate_basic_briefing(market_data, scores):
    """備用方案：基本格式晨報"""
    today = datetime.now().strftime('%Y-%m-%d')
    
    # 找有新聞的股票
    stocks_with_news = []
    for ticker, data in market_data.get("stocks", {}).items():
        if data.get("news"):
            stock_info = scores.get(ticker, {})
            stocks_with_news.append({
                "ticker": ticker,
                "name": stock_info.get("name", ticker),
                "industry": stock_info.get("industry", "未分類"),
                "total_score": stock_info.get("scores", {}).get("total", 0),
                "news_count": len(data["news"])
            })
    
    # 按新聞數量排序
    stocks_with_news.sort(key=lambda x: x["news_count"], reverse=True)
    
    briefing = f"""# 台股投研晨報 {today}

## 變動優先 Top 5

"""
    
    for i, stock in enumerate(stocks_with_news[:5], 1):
        briefing += f"""{i}) {stock['ticker']} {stock['name']} | {stock['industry']} | 總分 {stock['total_score']}
   - 觸發：有新聞動態 ({stock['news_count']} 條)
   - 觀察點：待進一步分析

"""
    
    briefing += """## 回覆指令
回覆 1/2/3 獲得建議：
- 1: 建議稿 (具體操作建議)
- 2: 大綱 (結構化分析)  
- 3: 推演框架 (情境分析)
"""
    
    return briefing

def save_briefing(briefing):
    """儲存晨報"""
    today = datetime.now().strftime('%Y-%m-%d')
    
    # 儲存到 data/briefings/
    briefings_file = f"data/briefings/brief-{today}.md"
    with open(briefings_file, 'w', encoding='utf-8') as f:
        f.write(briefing)
    
    # 儲存到 output/ (供 GitHub Actions 使用)
    with open('output/briefing.md', 'w', encoding='utf-8') as f:
        f.write(briefing)
    
    print(f"✅ 晨報已生成: {briefings_file}")

def main():
    """主程序"""
    print("🧠 開始生成台股投研晨報...")
    
    # Layer I - 載入信息
    market_data = load_market_data()
    scores = load_watchlist_scores()
    
    # Layer K - 知識處理與生成
    briefing = generate_briefing_with_ai(market_data, scores)
    
    # 儲存結果
    save_briefing(briefing)
    
    print("✅ 晨報生成完成！")

if __name__ == "__main__":
    main()