"""
Engine Phân Tích Chênh Lệch Giá & Cố Vấn Giao Dịch Đa Đặc Vụ (POE2 Realtime Market Advisor)
"""

from typing import Any, Dict, List, Optional

from pydantic import BaseModel

from src.assistant_tool.config import Config
from src.assistant_tool.gold_tracker import GoldTracker


class ArbitrageTrade(BaseModel):
    id: str
    category: str
    title: str
    cost_description: str
    revenue_description: str
    net_profit_divine: float
    roi_percent: float
    gold_tax_required: int
    is_affordable: bool = True
    max_times_affordable: int = 0
    risk_level: str
    action_steps: List[str]
    trade_url: Optional[str] = None

class MarketAdvisor:
    def __init__(self, gold_tracker: GoldTracker, initial_league: str = Config.DEFAULT_LEAGUE):
        self.gold_tracker = gold_tracker
        self.league = initial_league

    def set_league(self, league: str) -> None:
        self.league = league

    def get_market_opportunities(self) -> List[ArbitrageTrade]:
        """Danh mục các cơ hội buôn chênh lệch chuẩn cơ chế POE2 cập nhật thời gian thực theo từng Mùa giải."""
        trades_raw: List[Dict[str, Any]]
        if self.league == "Forbidden Rite":
            trades_raw = [
                {
                    "id": "TRADE_SEKHEMA_KEY",
                    "category": "PINNACLE_KEYS",
                    "tax_key": "PINNACLE_KEY",
                    "title": "[Forbidden Rite] Gom Mảnh Ghép Chìa Khóa Sekhema Key",
                    "cost_description": "Mua 4 mảnh 'Sekhema Key Fragment' (0.8 Div/mảnh = 3.2 Div)",
                    "revenue_description": "Bán Chìa Khóa Sekhema Hoàn Chỉnh cho khách cày 8 điểm Thăng hoa: 4.8 Div",
                    "net_profit_divine": 1.6,
                    "roi_percent": 50.0,
                    "risk_level": "Rất Thấp (Mùa mới nhu cầu Trial cực lớn)",
                    "trade_url": "https://www.pathofexile.com/trade2/search/poe2/Forbidden%20Rite?q=%7B%22query%22%3A%7B%22type%22%3A%22Sekhema%22%7D%7D",
                    "action_steps": [
                        "Bật tìm kiếm official trade mùa Forbidden Rite mua 4 mảnh Sekhema Fragment lẻ giá <= 0.8 Div.",
                        "Nhấp chuột phải ghép 4 mảnh thành 1 chìa khóa hoàn chỉnh trong hòm đồ.",
                        "Treo bán chìa hoàn chỉnh giá 4.8 Div hoặc bán sỉ cho các runner Sekhema Carry."
                    ]
                },
                {
                    "id": "TRADE_GEM_6LINK",
                    "category": "GEM_SOCKETING",
                    "tax_key": "GEM_6LINK",
                    "title": "[Forbidden Rite] Chế Tác Đục 5-Lỗ Hỗ Trợ Ngọc Kỹ Năng Starter Meta",
                    "cost_description": "Mua Uncut Skill Gem Lv20 (25 Chaos) + Đục 5 lỗ Jeweller's (~40 Chaos)",
                    "revenue_description": "Bán viên ngọc 6-Link hoàn chỉnh (Ice Nova / Spark / Bonestorm): 2.8 Div (~378 Chaos)",
                    "net_profit_divine": 2.3,
                    "roi_percent": 480.0,
                    "risk_level": "Thấp (Nhu cầu build đầu giải đấu)",
                    "trade_url": "https://www.pathofexile.com/trade2/search/poe2/Forbidden%20Rite?q=%7B%22query%22%3A%7B%22type%22%3A%22Uncut%20Skill%20Gem%22%7D%7D",
                    "action_steps": [
                        "Mua Uncut Skill Gem Level 20 trên chợ mùa Forbidden Rite giá 20-25 Chaos.",
                        "Chọn kỹ năng meta đang hot (ví dụ: Ice Nova hoặc Spark).",
                        "Dùng Jeweller's Orbs đục tối đa 5 lỗ hỗ trợ (tương đương 6-link kỹ năng).",
                        "Treo bán ngọc thành phẩm 2.7 - 2.9 Divine."
                    ]
                },
                {
                    "id": "TRADE_OMEN_EXALT",
                    "category": "OMEN_CRAFT",
                    "tax_key": "OMEN",
                    "title": "[Forbidden Rite] Gom Lẻ Điềm Báo 'Omen of Greater Exaltation'",
                    "cost_description": "Mua lẻ từng cái từ người chơi cày Ritual mùa mới: 3.2 Div / Omen",
                    "revenue_description": "Bán sỉ cho các thợ rèn đồ endgame: 4.6 Div / Omen",
                    "net_profit_divine": 1.4,
                    "roi_percent": 43.7,
                    "risk_level": "Thấp",
                    "trade_url": "https://www.pathofexile.com/trade2/search/poe2/Forbidden%20Rite?q=%7B%22query%22%3A%7B%22type%22%3A%22Omen%20of%20Greater%20Exaltation%22%7D%7D",
                    "action_steps": [
                        "Đặt live search mùa Forbidden Rite mua Omen of Greater Exaltation với giá <= 3.3 Div.",
                        "Gom đủ từ 3 đến 5 chiếc.",
                        "Đăng bán trọn gói theo lô (Bulk listing) với giá 4.6 Div/chiếc."
                    ]
                },
                {
                    "id": "TRADE_BREACHSTONE",
                    "category": "PINNACLE_KEYS",
                    "tax_key": "PINNACLE_KEY",
                    "title": "[Forbidden Rite] Ép Mảnh Vỡ Thành Đá Boss 'Flawless Breachstone'",
                    "cost_description": "Mua 100 Breach Splinters: 1.7 Div",
                    "revenue_description": "Ghép thành Flawless Breachstone bán ngay: 2.6 Div",
                    "net_profit_divine": 0.9,
                    "roi_percent": 52.9,
                    "risk_level": "Rất Thấp",
                    "trade_url": "https://www.pathofexile.com/trade2/search/poe2/Forbidden%20Rite?q=%7B%22query%22%3A%7B%22type%22%3A%22Breach%22%7D%7D",
                    "action_steps": [
                        "Mua 100 mảnh Breach Splinters giá rẻ từ người đi map Breach.",
                        "Tự động ghép lại thành Breachstone.",
                        "Treo bán cho người chơi cần mở map farm Unique Boss mùa giải."
                    ]
                },
                {
                    "id": "TRADE_BULK_ORBS",
                    "category": "BULK_EXCHANGE",
                    "tax_key": "BULK_DIVINE",
                    "tax_amount": 3500,
                    "title": "[Forbidden Rite] Buôn Sỉ Lô Divine Orbs vs Chaos Orbs (Hideout Flipping)",
                    "cost_description": "Mua lẻ 10 Divine với tỷ giá 130 Chaos / Div = 1.300 Chaos",
                    "revenue_description": "Bán sỉ lô 10 Divine cho dân cày map với tỷ giá 142 Chaos / Div = 1.420 Chaos",
                    "net_profit_divine": 0.85,
                    "roi_percent": 9.2,
                    "risk_level": "Cực Thấp (Rủi ro bằng 0)",
                    "trade_url": "https://www.pathofexile.com/trade2/exchange/poe2/Forbidden%20Rite",
                    "action_steps": [
                        "Treo lệnh mua Divine bằng Chaos giá 130c trên Chợ Hối Đoái mùa Forbidden Rite.",
                        "Khi đủ 10 Divine, đổi chiều lệnh: bán sỉ 10 Divine lấy 142c/Div.",
                        "Chú ý cần sẵn sàng ~3.500 Vàng để thanh toán thuế chợ."
                    ]
                }
            ]
        else:
            # Thị trường Standard (Vĩnh cửu)
            trades_raw = [
                {
                    "id": "TRADE_SEKHEMA_KEY_STD",
                    "category": "PINNACLE_KEYS",
                    "tax_key": "PINNACLE_KEY",
                    "title": "[Standard] Gom Mảnh Ghép Chìa Khóa Sekhema Key",
                    "cost_description": "Mua 4 mảnh 'Sekhema Key Fragment' (0.7 Div/mảnh = 2.8 Div)",
                    "revenue_description": "Bán Chìa Khóa Sekhema Hoàn Chỉnh: 3.9 Div",
                    "net_profit_divine": 1.1,
                    "roi_percent": 39.2,
                    "risk_level": "Thấp",
                    "trade_url": "https://www.pathofexile.com/trade2/search/poe2/Standard?q=%7B%22query%22%3A%7B%22type%22%3A%22Sekhema%22%7D%7D",
                    "action_steps": [
                        "Mua 4 mảnh Sekhema Fragment giá 0.7 Div trên Standard.",
                        "Ghép thành chìa khóa hoàn chỉnh và treo bán 3.9 Div."
                    ]
                },
                {
                    "id": "TRADE_BULK_ORBS_STD",
                    "category": "BULK_EXCHANGE",
                    "tax_key": "BULK_DIVINE",
                    "tax_amount": 3500,
                    "title": "[Standard] Buôn Sỉ Lô Divine Orbs (Tỷ giá Standard 195c)",
                    "cost_description": "Mua lẻ 10 Divine tỷ giá 185 Chaos / Div = 1.850 Chaos",
                    "revenue_description": "Bán sỉ 10 Divine tỷ giá 198 Chaos / Div = 1.980 Chaos",
                    "net_profit_divine": 0.65,
                    "roi_percent": 7.0,
                    "risk_level": "Cực Thấp",
                    "trade_url": "https://www.pathofexile.com/trade2/exchange/poe2/Standard",
                    "action_steps": [
                        "Giao dịch hối đoái Chaos/Divine theo tỷ giá tích lũy Standard."
                    ]
                }
            ]
        result: List[ArbitrageTrade] = []
        current_gold = self.gold_tracker.current_gold

        for item in trades_raw:
            unit_tax = Config.GOLD_TAX_RATES.get(str(item.get("tax_key", "")), 300)
            tax = int(item.get("tax_amount", unit_tax))
            is_afford = current_gold >= tax
            max_times = current_gold // tax if tax > 0 else 999

            trade = ArbitrageTrade(
                id=str(item["id"]),
                category=str(item["category"]),
                title=str(item["title"]),
                cost_description=str(item["cost_description"]),
                revenue_description=str(item["revenue_description"]),
                net_profit_divine=float(item["net_profit_divine"]),
                roi_percent=float(item["roi_percent"]),
                gold_tax_required=tax,
                is_affordable=is_afford,
                max_times_affordable=max_times,
                risk_level=str(item["risk_level"]),
                action_steps=list(item["action_steps"]),
                trade_url=str(item["trade_url"]) if item.get("trade_url") else None
            )
            result.append(trade)

        # Xếp hạng: Kèo đủ tiền thuế lên trước, sau đó sắp theo lợi nhuận ròng Divine giảm dần
        result.sort(key=lambda t: (t.is_affordable, t.net_profit_divine, t.roi_percent), reverse=True)
        return result

    def get_ai_strategy_report(self) -> str:
        """Sinh phân tích chiến lược tổng quát dựa trên quỹ Vàng hiện tại."""
        gold = self.gold_tracker.current_gold
        trades = self.get_market_opportunities()
        affordable_count = sum(1 for t in trades if t.is_affordable)

        report = f"""[CỐ VẤN CHIẾN LƯỢC AI POE2]
• Mùa giải đang chọn: {self.league}
• Quỹ Vàng hiện có: {gold:,} Gold
• Số kèo khả thi gánh được thuế Vàng: {affordable_count}/{len(trades)} kèo
"""
        if gold < 10000:
            report += "⚠️ CẢNH BÁO: Quỹ Vàng dưới 10k! Khuyến nghị chạy 2-3 map Waystone nhặt Vàng trước khi gom sỉ Divine."
        elif affordable_count > 0:
            top = trades[0]
            report += f"🔥 GỢI Ý TỐI ƯU NHẤT: '{top.title}'\n"
            report += f"  - Lợi nhuận ròng: +{top.net_profit_divine} Divine (ROI {top.roi_percent}%)\n"
            report += f"  - Thuế Vàng: {top.gold_tax_required} Gold (Bạn đủ sức thực hiện {top.max_times_affordable} lần liên tiếp)!"
        return report
