"""
WFIS DeepSeek AI Service
تحلیل هوشمند بازار با استفاده از DeepSeek API
"""

import os
import json
from openai import OpenAI
from dotenv import load_dotenv

# بارگذاری مجدد اطمینان
load_dotenv()


class DeepSeekService:
    """سرویس یکپارچه‌سازی DeepSeek برای تحلیل بازار"""
    
    def __init__(self):
        self.api_key = os.getenv('DEEPSEEK_API_KEY', 'sk-b435131037fd4e07b322bf1ae8dcd3b5')
        self.base_url = "https://api.deepseek.com/v1"
        
        if not self.api_key:
            print("⚠️ Warning: DEEPSEEK_API_KEY not found in environment")
            self.client = None
        else:
            try:
                self.client = OpenAI(
                    api_key=self.api_key,
                    base_url=self.base_url
                )
                print("✅ DeepSeek API client initialized successfully")
            except Exception as e:
                print(f"❌ Error initializing DeepSeek client: {e}")
                self.client = None
        
        self.model = "deepseek-chat"
    
    def analyze_market(self, market_data):
        """
        تحلیل کامل بازار با استفاده از DeepSeek
        
        Args:
            market_data (dict): داده‌های بازار شامل قیمت، نقدینگی، نوسان، سناریوها
        
        Returns:
            str: تحلیل هوشمند بازار
        """
        if not self.client:
            print("⚠️ DeepSeek client not available, using fallback")
            return self._fallback_analysis(market_data)
        
        system_prompt = self._create_system_prompt()
        user_prompt = self._create_user_prompt(market_data)
        
        try:
            print("🔄 Sending request to DeepSeek API...")
            response = self.client.chat.completions.create(
                model=self.model,
                messages=[
                    {"role": "system", "content": system_prompt},
                    {"role": "user", "content": user_prompt}
                ],
                temperature=0.3,
                max_tokens=1500
            )
            print("✅ DeepSeek API response received successfully")
            return response.choices[0].message.content
        except Exception as e:
            print(f"❌ DeepSeek API error: {e}")
            return self._fallback_analysis(market_data)
    
    def analyze_market_async(self, market_data, callback=None):
        """
        تحلیل غیرهمزمان بازار با DeepSeek
        
        Args:
            market_data (dict): داده‌های بازار
            callback: تابع回调 پس از اتمام تحلیل
        
        Returns:
            str: تحلیل هوشمند بازار (در صورت عدم استفاده از callback)
        """
        import threading
        
        def _analyze():
            result = self.analyze_market(market_data)
            if callback:
                callback(result)
            return result
        
        thread = threading.Thread(target=_analyze)
        thread.start()
        return {"status": "processing", "message": "Analysis in progress"}
    
    def _create_system_prompt(self):
        """ساخت پرامپت سیستم برای DeepSeek"""
        return """
شما یک تحلیلگر حرفه‌ای بازارهای مالی با تخصص در:
- تحلیل تکنیکال و ساختار بازار
- مدیریت ریسک و تحلیل نقدینگی
- پیش‌بینی سناریوهای قیمتی
- ارائه استراتژی‌های معاملاتی

قوانین تحلیل:
1. بر اساس داده‌های واقعی و محاسبات کمی تحلیل کنید
2. هیچگاه تضمینی برای سود یا پیش‌بینی قطعی ندهید
3. بر ریسک‌ها و عدم قطعیت‌ها تأکید کنید
4. از اصطلاحات تخصصی با توضیح ساده استفاده کنید
5. در پایان خلاصه‌ای از استراتژی پیشنهادی ارائه دهید

خروجی را به زبان فارسی و با فرمت حرفه‌ای ارائه دهید.
"""
    
    def _create_user_prompt(self, data):
        """ساخت پرامپت کاربر بر اساس داده‌های بازار"""
        # استخراج مناطق نقدینگی
        zones_text = ""
        zones = data.get('liquidity_zones', [])
        for i, zone in enumerate(zones[:3]):
            zones_text += f"\n- منطقه {i+1}: ${zone.get('level', 0):,.0f} (قدرت: {zone.get('strength', 0)*100:.0f}%)"
        
        if not zones_text:
            zones_text = "\n- منطقه نقدینگی مشخصی شناسایی نشد"
        
        prompt = f"""
لطفا بازار را بر اساس داده‌های زیر تحلیل کن:

📊 **داده‌های لحظه‌ای:**
- نماد: {data.get('symbol', 'BTC-USD')}
- قیمت فعلی: ${data.get('price', 0):,.0f}
- تغییر 24h: {data.get('change_24h', 0):.2f}%
- حجم 24h: {data.get('volume', 0):,.0f}

📍 **مناطق نقدینگی:**{zones_text}

⚠️ **جریان سفارشات:** {data.get('order_flow_anomaly', 'NORMAL')}

📈 **نوسان‌پذیری:**
- چشمانداز: {data.get('volatility_outlook', 'Normal')}
- نوسان فعلی: {data.get('current_volatility', 0):.1f}%
- نوسان تاریخی: {data.get('historical_volatility', 0):.1f}%

🎲 **سناریوهای محتمل (مونت کارلو):**
- صعودی: {data.get('scenarios', {}).get('bullish', 0):.1f}%
- نزولی: {data.get('scenarios', {}).get('bearish', 0):.1f}%
- خنثی: {data.get('scenarios', {}).get('neutral', 0):.1f}%

🎯 **اهداف قیمتی:**
- هدف صعودی: ${data.get('price_targets', {}).get('bullish', 0):,.0f}
- هدف نزولی: ${data.get('price_targets', {}).get('bearish', 0):,.0f}
- محتمل‌ترین: ${data.get('price_targets', {}).get('most_likely', 0):,.0f}

لطفا تحلیل جامع شامل:
1. تفسیر وضعیت فعلی بازار
2. ارزیابی ریسک‌ها
3. استراتژی پیشنهادی (ورود/خروج/حد ضرر)
4. جمع‌بندی نهایی

ارائه دهید.
"""
        return prompt
    
    def _fallback_analysis(self, data):
        """تحلیل جایگزین در صورت عدم دسترسی به API"""
        symbol = data.get('symbol', 'BTC-USD')
        price = data.get('price', 0)
        change = data.get('change_24h', 0)
        anomaly = data.get('order_flow_anomaly', 'LOW')
        volatility = data.get('volatility_outlook', 'Normal')
        scenarios = data.get('scenarios', {})
        
        analysis = f"""
📊 **تحلیل بازار {symbol}**

**وضعیت فعلی:**
قیمت در سطح ${price:,.0f} قرار دارد که {abs(change):.1f}% {'افزایش' if change > 0 else 'کاهش'} نسبت به دیروز داشته است.

**جریان سفارشات:**
سطح ناهنجاری {anomaly} است. {'حجم غیرعادی نشاندهنده فعالیت نهنگ‌هاست' if anomaly == 'HIGH' else 'بازار در حالت عادی قرار دارد' if anomaly == 'LOW' else 'احتیاط لازم است'}.

**نوسان‌پذیری:**
چشمانداز نوسان‌پذیری {volatility} ارزیابی می‌شود. {'احتمال نوسانات شدید در روزهای آینده وجود دارد' if 'Elevated' in volatility else 'بازار نسبتا با ثبات است'}.

**سناریوهای محتمل:**
- سناریو خنثی با {scenarios.get('neutral', 40):.0f}% بالاترین احتمال را دارد
- سناریو صعودی: {scenarios.get('bullish', 30):.0f}%
- سناریو نزولی: {scenarios.get('bearish', 30):.0f}%

💡 **استراتژی پیشنهادی:**
با توجه به غالب بودن سناریو خنثی بهتر است در محدوده فعلی معامله نکنید. منتظر شکست قیمت از محدوده مشخص شده باشید.

🛡️ **مدیریت ریسک:**
- حداکثر ریسک در هر معامله: 1-2% سرمایه
- در صورت لزوم حد ضرر را زیر مناطق نقدینگی کلیدی قرار دهید

⚠️ این تحلیل بر اساس داده‌های لحظه‌ای تهیه شده و توصیه قطعی برای معامله نیست.
"""
        return analysis
    
    def test_connection(self):
        """تست اتصال به DeepSeek API"""
        if not self.client:
            return {"status": "error", "message": "DeepSeek client not initialized"}
        
        try:
            test_response = self.client.chat.completions.create(
                model=self.model,
                messages=[
                    {"role": "system", "content": "You are a helpful assistant."},
                    {"role": "user", "content": "Say 'API is working'"}
                ],
                temperature=0.1,
                max_tokens=20
            )
            return {
                "status": "success", 
                "message": "DeepSeek API is working",
                "response": test_response.choices[0].message.content
            }
        except Exception as e:
            return {"status": "error", "message": str(e)}


# نمونه استفاده
if __name__ == "__main__":
    service = DeepSeekService()
    
    # تست اتصال
    test_result = service.test_connection()
    print(f"Test Result: {test_result}")
    
    sample_data = {
        'symbol': 'BTC-USD',
        'price': 43250,
        'change_24h': 2.35,
        'volume': 18400000000,
        'liquidity_zones': [
            {'level': 42800, 'strength': 0.85},
            {'level': 43500, 'strength': 0.72}
        ],
        'order_flow_anomaly': 'MODERATE',
        'volatility_outlook': 'Elevated risk',
        'current_volatility': 48.5,
        'historical_volatility': 42.3,
        'scenarios': {'bullish': 32, 'bearish': 28, 'neutral': 40},
        'price_targets': {'bullish': 45800, 'bearish': 40800, 'most_likely': 43100}
    }
    
    result = service.analyze_market(sample_data)
    print("\n" + "="*50)
    print("Analysis Result:")
    print("="*50)
    print(result)