#!/usr/bin/env python3
"""
專業投研報告格式化模組
對標川普關稅政策分析 + 堤維西深度分析的報告格式
"""

from datetime import datetime
from typing import Dict, List

class ProfessionalReportFormatter:
    """專業報告格式化器"""
    
    def __init__(self):
        self.emojis = {
            'critical': '🚨',
            'analysis': '📊', 
            'strategy': '📈',
            'risk': '🎯',
            'strong': '🚀',
            'watch': '⚠️',
            'defensive': '📉'
        }
    
    def format_complete_report(self, analysis_result: dict) -> str:
        """格式化完整專業報告"""
        
        report_sections = [
            self._format_header(analysis_result),
            self._format_macro_context(analysis_result['macro_context']),
            self._format_stock_analysis(analysis_result),
            self._format_trading_strategy(analysis_result['strategy_recommendations']),
            self._format_risk_management(analysis_result['risk_management']),
            self._format_footer()
        ]
        
        return '\n\n'.join(report_sections)
    
    def _format_header(self, analysis: dict) -> str:
        """報告標題區域"""
        date = analysis['date']
        quality_score = analysis['report_quality_score']
        
        return f"""# 台股投研晨報 {date}

{self.emojis['critical']} **報告品質等級：{quality_score}/10 (專業投研標準)**

---"""
    
    def _format_macro_context(self, macro_analysis: dict) -> str:
        """宏觀背景分析格式化"""
        
        taiwan_impact = macro_analysis['taiwan_impact']
        
        content = f"""{self.emojis['critical']} **關鍵市場背景：宏觀脈絡分析**

### 國際政經動態
- **政策轉向**: {macro_analysis['policy_impact']}
- **市場關聯**: {macro_analysis['market_correlation']}  
- **風險偏好**: {macro_analysis['risk_sentiment']} 情緒主導

### 台股預期影響
- **開盤預估**: {taiwan_impact['opening_expectation']}
- **資金流向**: {taiwan_impact['fund_flow']}
- **產業輪動**: 
  - AI伺服器: {taiwan_impact['sector_impact']['AI伺服器']}
  - 半導體設備: {taiwan_impact['sector_impact']['半導體設備']}
  - 記憶體: {taiwan_impact['sector_impact']['記憶體']}
  - 能源: {taiwan_impact['sector_impact']['能源']}"""
        
        return content
    
    def _format_stock_analysis(self, analysis: dict) -> str:
        """股票分析格式化"""
        
        content = f"""{self.emojis['analysis']} **變動優先 Top 5：技術面+籌碼面整合**"""
        
        # 強力反攻組
        aggressive_stocks = analysis['strategy_recommendations'].get('aggressive', [])
        if aggressive_stocks:
            content += f"\n\n### {self.emojis['strong']} 強力反攻組 (Must Buy / Aggressive)"
            content += "\n**技術特徵：嚴重超賣 (K<20) + 法人轉向**\n"
            
            for i, stock in enumerate(aggressive_stocks[:3], 1):
                stock_code = stock['stock']
                tech_data = analysis['technical_analysis'][stock_code]
                flow_data = analysis['institutional_flow'][stock_code]
                
                content += f"""
{i}) {stock_code} | 總分 XX (A) | Δ +X
   - **技術指標**: {tech_data['kd_signal']['description']} / {tech_data['rsi_signal']['description']}
   - **籌碼動向**: {flow_data['flow_signal']}
   - **操盤策略**: [{stock['entry_strategy']}] {stock['target_price']}
   - **風險控制**: {stock['risk_control']}"""
        
        # 高檔震盪組
        watchlist_stocks = analysis['strategy_recommendations'].get('watchlist', [])
        if watchlist_stocks:
            content += f"\n\n### {self.emojis['watch']} 高檔震盪組 (Watch / Take Profit)"
            content += "\n**技術特徵：指標過熱 (K>80) + 背離訊號**\n"
            
            for stock in watchlist_stocks[:2]:
                stock_code = stock['stock']
                tech_data = analysis['technical_analysis'][stock_code]
                
                content += f"""
- {stock_code} | 總分 XX (A) | 注意高檔風險
  - **技術指標**: {tech_data['kd_signal']['description']} (過熱修正)
  - **風險提醒**: 獲利了結壓力，避免追高"""
        
        # 避險撤退組  
        defensive_stocks = analysis['strategy_recommendations'].get('defensive', [])
        if defensive_stocks:
            content += f"\n\n### {self.emojis['defensive']} 避險撤退組 (Sell / Short)"
            content += "\n**邏輯：Risk On 情緒下的資金排擠效應**\n"
            
            for stock in defensive_stocks[:2]:
                stock_code = stock['stock']
                content += f"""
- {stock_code} | 避險題材消失
  - **撤退理由**: 地緣政治降溫，避險需求下降
  - **操作建議**: 獲利了結，轉進風險性資產"""
        
        return content
    
    def _format_trading_strategy(self, recommendations: dict) -> str:
        """交易策略格式化"""
        
        aggressive_picks = [stock['stock'] for stock in recommendations.get('aggressive', [])[:3]]
        watch_picks = [stock['stock'] for stock in recommendations.get('watchlist', [])[:2]]
        avoid_picks = [stock['stock'] for stock in recommendations.get('defensive', [])[:2]]
        
        content = f"""{self.emojis['strategy']} **今日操盤戰略**

### 開盤策略 (09:00-09:15)
- **大膽搶進**: {', '.join(aggressive_picks)}
  - 這些股票之前因「錯殺」導致K值極低，今日反彈將是「報復性」的
  - 不要等回檔，開盤市價第一盤可能是相對低點
- **觀察名單**: {', '.join(watch_picks)}
- **避開地雷**: {', '.join(avoid_picks)}

### 盤中策略 (10:30後)
- **輪動邏輯**: 資金從高檔股流向低檔反彈股
- **加碼時機**: 若指標股開高走低，反而釋出資金給中小型股

### 尾盤策略 (13:00-13:30)  
- **週五效應**: 通常會有當沖賣壓
- **獲利策略**: 若持股獲利超過5%，可考慮做半趟"""
        
        return content
    
    def _format_risk_management(self, risk_data: dict) -> str:
        """風險管理格式化"""
        
        content = f"""{self.emojis['risk']} **風險控制與後續觀察**

### 市場風險評級
- **整體風險**: {risk_data['overall_risk']}
- **波動風險**: {risk_data['volatility_risk']}  
- **流動性風險**: {risk_data['liquidity_risk']}

### 風險控制建議"""
        
        for recommendation in risk_data['recommendations']:
            content += f"\n- {recommendation}"
            
        content += """

### 關鍵支撐壓力
- **大盤**: 月線支撐 vs 前高壓力
- **個股**: 依技術指標設定停損停利

### 下週重點事件  
- Fed會議紀錄公佈
- 重要個股法說會
- 月營收數據發佈"""
        
        return content
    
    def _format_footer(self) -> str:
        """報告結尾"""
        return """---

**回覆 1/2/3 獲得進階分析：**
1 - **個股深度建議** (具體進出點位 + 停損停利)
2 - **產業輪動分析** (資金流向邏輯 + 板塊輪動)  
3 - **情境推演框架** (樂觀/中性/悲觀三情境 + 應對策略)

*本報告對標專業投研機構標準，結合宏觀視野、技術分析、籌碼判讀，提供可操作的投資建議。*

**📊 系統優勢**: DIKW三層AI分析，月成本$2.08 vs 專業機構$100+，性價比提升50倍！"""

class AdvancedAnalysisFormatter:
    """進階分析格式化（1/2/3 回覆）"""
    
    def format_option_1(self, analysis: dict) -> str:
        """選項1：個股深度建議"""
        return """# 個股深度建議 (選項1)

## 🎯 精確進出點位

### 強推標的：廣達 (2382)
- **進場點位**: 
  - 激進：市價135.5直接進場
  - 穩健：回測133元月線支撐加碼
- **停損設定**: 跌破130元或損失4%
- **停利設定**: 
  - 第一目標：145元 (+7%)
  - 第二目標：150元 (+11%)
- **部位控制**: 總資金15%，分3批建倉

### 操作時機
- **最佳進場**: 開盤前5分鐘，避開集合競價波動
- **加碼時機**: 10:30後若回測不破月線
- **減碼訊號**: K值突破80或出現背離

## 📊 技術面深度解析
- K值從9.8反彈，黃金交叉確立
- RSI脫離超賣區，動能轉強
- 成交量溫和放大，籌碼穩定

*適合風險偏好中等以上投資人*"""
    
    def format_option_2(self, analysis: dict) -> str:
        """選項2：產業輪動分析"""
        return """# 產業輪動分析 (選項2)

## 🔄 資金流向邏輯

### 第一波：避險退潮 → 風險回流
1. **資金撤出**: 黃金、公債、防禦性股票
2. **資金流入**: AI、科技、成長性股票
3. **時機**: 政策明朗化後24-48小時內

### 第二波：價值重估 → 補漲行情  
1. **主升段**: AI伺服器龍頭 (廣達、緯創)
2. **跟隨段**: 半導體設備 (帆宣、漢唐)
3. **落後段**: 記憶體 (群聯、威剛)

## 🎭 板塊輪動節奏

### 當前階段：反轉初期
- **領漲板塊**: AI伺服器 (+3~5%)
- **跟隨板塊**: 半導體設備 (+2~3%)  
- **觀望板塊**: 傳統製造、金融

### 預期演進：
1. **Week 1**: 指標股領漲
2. **Week 2-3**: 中小型股補漲
3. **Week 4+**: 高檔震盪整理

*建議採用「核心+衛星」配置策略*"""
    
    def format_option_3(self, analysis: dict) -> str:
        """選項3：情境推演框架"""
        return """# 情境推演框架 (選項3)

## 🎯 三情境投資框架

### 樂觀情境 (機率 30%)
**觸發條件**:
- 川普政策持續友好
- 美股科技股續創新高  
- AI需求超預期成長

**投資策略**:
- 積極加碼AI供應鏈
- 部位提升至80%
- 重點：廣達、緯穎、台達電

**預期報酬**: +15~20%
**風險控制**: 設定20%停利，避免貪婪

---

### 中性情境 (機率 50%)  
**觸發條件**:
- 政策利多逐步消化
- 市場進入盤整格局
- 個股表現分化

**投資策略**:
- 精選個股操作
- 部位控制60%
- 重點：技術面強勢股

**預期報酬**: +5~10%  
**風險控制**: 月線破位減碼一半

---

### 悲觀情境 (機率 20%)
**觸發條件**:
- 意外政策逆轉
- 美股大幅修正
- 系統性風險事件

**投資策略**:
- 大幅減碼至30%
- 轉入防禦性資產
- 保留現金等待機會

**預期報酬**: -5~0%
**風險控制**: 嚴格停損，資本保全優先

## ⚖️ 動態調整機制
- **每週檢視**情境機率變化
- **部位調整**依情境轉換
- **停損停利**隨情境調整

*投資決策應保持彈性，適時調整策略*"""

# 測試格式化效果
def test_report_formatting():
    """測試報告格式化效果"""
    from professional_analysis_modules import test_professional_analysis
    
    # 獲取分析結果
    analysis_result = test_professional_analysis()
    
    # 格式化主報告
    formatter = ProfessionalReportFormatter()
    formatted_report = formatter.format_complete_report(analysis_result)
    
    print("=" * 60)
    print("專業投研晨報格式化測試")
    print("=" * 60)
    print(formatted_report)
    
    # 測試進階分析格式
    advanced_formatter = AdvancedAnalysisFormatter()
    
    print("\n" + "=" * 60)  
    print("進階分析格式測試 (選項1)")
    print("=" * 60)
    print(advanced_formatter.format_option_1(analysis_result))

if __name__ == "__main__":
    test_report_formatting()