"""
WFIS Alert System
سیستم هشدار خودکار بر اساس شرایط بازار
"""

import json
import os
from datetime import datetime
import threading
import time


class AlertSystem:
    def __init__(self, alerts_file="alerts/alerts.json"):
        self.alerts_file = alerts_file
        self.alerts = []
        self.rules = []
        self.load_alerts()
    
    def load_alerts(self):
        if os.path.exists(self.alerts_file):
            with open(self.alerts_file, 'r') as f:
                data = json.load(f)
                self.alerts = data.get('alerts', [])
                self.rules = data.get('rules', [])
    
    def save_alerts(self):
        os.makedirs(os.path.dirname(self.alerts_file), exist_ok=True)
        with open(self.alerts_file, 'w') as f:
            json.dump({'alerts': self.alerts[-100:], 'rules': self.rules}, f, indent=2)
    
    def add_rule(self, name, condition, value, symbol="BTC-USD"):
        self.rules.append({
            'id': len(self.rules) + 1,
            'name': name,
            'symbol': symbol,
            'condition': condition,
            'value': value,
            'active': True,
            'created_at': datetime.now().isoformat()
        })
        self.save_alerts()
    
    def add_price_alert(self, symbol, price, condition="above"):
        """افزودن هشدار قیمتی"""
        self.add_rule(
            name=f"Price Alert {symbol}",
            condition=condition,
            value=price,
            symbol=symbol
        )
    
    def check_market_conditions(self, market_data):
        new_alerts = []
        symbol = market_data.get('symbol', 'BTC-USD')
        
        # قوانین پیش‌فرض
        change = market_data.get('snapshot', {}).get('change_24h', 0)
        if abs(change) > 5:
            new_alerts.append(f"⚠️ [PRICE] {symbol} changed {change:.1f}% in 24h")
        
        anomaly = market_data.get('liquidity_analysis', {}).get('order_flow_anomaly', 'LOW')
        if anomaly == 'HIGH':
            new_alerts.append(f"🐋 [ANOMALY] High order flow anomaly detected on {symbol}")
        
        volatility = market_data.get('volatility_analysis', {}).get('outlook', 'Normal')
        if volatility == 'Elevated risk':
            new_alerts.append(f"📈 [VOLATILITY] Elevated risk forecast for {symbol}")
        
        scenarios = market_data.get('scenario_analysis', {}).get('scenarios', {})
        if scenarios.get('bullish', 0) > 50:
            new_alerts.append(f"🟢 [BULLISH] Strong bullish signal for {symbol} ({scenarios['bullish']:.0f}%)")
        if scenarios.get('bearish', 0) > 50:
            new_alerts.append(f"🔴 [BEARISH] Strong bearish signal for {symbol} ({scenarios['bearish']:.0f}%)")
        
        # قوانین کاربر
        for rule in self.rules:
            if not rule.get('active', True):
                continue
            if rule['symbol'] != symbol:
                continue
            
            price = market_data.get('snapshot', {}).get('price', 0)
            if rule['condition'] == 'above' and price > rule['value']:
                new_alerts.append(f"🎯 [RULE] {rule['name']}: Price ${price:,.0f} above ${rule['value']:,.0f}")
                rule['active'] = False
            elif rule['condition'] == 'below' and price < rule['value']:
                new_alerts.append(f"🎯 [RULE] {rule['name']}: Price ${price:,.0f} below ${rule['value']:,.0f}")
                rule['active'] = False
        
        for alert in new_alerts:
            self.alerts.append({
                'message': alert,
                'timestamp': datetime.now().isoformat(),
                'read': False
            })
        
        if new_alerts:
            self.save_alerts()
        
        return new_alerts
    
    def get_unread_alerts(self):
        unread = [a for a in self.alerts if not a.get('read', False)]
        for a in unread:
            a['read'] = True
        self.save_alerts()
        return unread
    
    def get_all_alerts(self, limit=50):
        return self.alerts[-limit:]
    
    def get_alerts_by_symbol(self, symbol):
        return [a for a in self.alerts if symbol in a.get('message', '')]
    
    def clear_alerts(self):
        self.alerts = []
        self.save_alerts()


# نمونه استفاده
if __name__ == "__main__":
    alert_system = AlertSystem()
    print("✅ Alert system initialized")