import json
import os
import random
import time
import logging
from threading import Lock
from config_center import CONFIG

logger = logging.getLogger(__name__)

class ZodiacManager:
    """十二生肖系统管理器 - 通过 ConfigCenter 统一读写配置"""
    
    def __init__(self, config_path='config.json'):
        self.config_path = config_path
        self._load_config()
        self.lock = Lock()
        self._last_load = time.time()
    
    def _load_config(self):
        """从 CONFIG 中心加载配置"""
        self.config = CONFIG.get('zodiac', {})
        # 确保必要字段存在
        if 'zodiacs' not in self.config:
            self.config['zodiacs'] = []
        if 'drops' not in self.config:
            self.config['drops'] = []
    
    def _save_config(self):
        """写回文件并通知 CONFIG 重载"""
        try:
            # 读取完整配置
            with open(self.config_path, 'r', encoding='utf-8') as f:
                full = json.load(f)
            full['zodiac'] = self.config
            with open(self.config_path, 'w', encoding='utf-8') as f:
                json.dump(full, f, ensure_ascii=False, indent=2)
            # 通知配置中心重载内存
            CONFIG.reload()
        except Exception as e:
            logger.error(f"保存生肖配置失败: {e}")
    
    def _get_default_config(self):
        return {
            "enabled": True,
            "zodiacs": [],
            "drops": []
        }
    
    def is_enabled(self):
        return self.config.get('enabled', False)
    
    def set_enabled(self, enabled):
        self.config['enabled'] = enabled
        self._save_config()
    
    def get_all_zodiacs(self):
        return self.config.get('zodiacs', [])
    
    def get_zodiac_by_id(self, zodiac_id):
        for z in self.config.get('zodiacs', []):
            if z.get('id') == zodiac_id:
                return z
        return None
    
    def add_zodiac(self, zodiac_data):
        with self.lock:
            zodiacs = self.config.get('zodiacs', [])
            max_id = max([z.get('id', 0) for z in zodiacs]) if zodiacs else 0
            new_id = max_id + 1
            zodiac_data['id'] = new_id
            zodiacs.append(zodiac_data)
            self.config['zodiacs'] = zodiacs
            self._save_config()
            return new_id
    
    def update_zodiac(self, zodiac_id, zodiac_data):
        with self.lock:
            zodiacs = self.config.get('zodiacs', [])
            for i, z in enumerate(zodiacs):
                if z.get('id') == zodiac_id:
                    zodiac_data['id'] = zodiac_id
                    zodiacs[i] = zodiac_data
                    self.config['zodiacs'] = zodiacs
                    self._save_config()
                    return True
            return False
    
    def delete_zodiac(self, zodiac_id):
        with self.lock:
            zodiacs = self.config.get('zodiacs', [])
            self.config['zodiacs'] = [z for z in zodiacs if z.get('id') != zodiac_id]
            drops = self.config.get('drops', [])
            self.config['drops'] = [d for d in drops if d.get('zodiac_id') != zodiac_id]
            self._save_config()
            return True
    
    def create_zodiac_item(self, zodiac_id):
        zodiac = self.get_zodiac_by_id(zodiac_id)
        if not zodiac:
            return None
        from combat import generate_uuid
        return {
            'uuid': generate_uuid(),
            'type': 'zodiac',
            'id': zodiac_id,
            'name': zodiac.get('name', '未知生肖'),
            'icon': zodiac.get('icon', '🐉'),
            'level_required': zodiac.get('level_required', 1),
            'attackMin': zodiac.get('attack_min', 0),
            'attackMax': zodiac.get('attack_max', 0),
            'defenseMin': zodiac.get('defense_min', 0),
            'defenseMax': zodiac.get('defense_max', 0),
            'hpBonus': zodiac.get('hp_bonus', 0),
            'enhanceLevel': 0,                     # 新增：强化等级默认0
            'description': zodiac.get('description', ''),
            'price': 10000,
            'quality': '生肖',                     # 保持字符串而非 None
            'acquiredTime': int(time.time()),
            'droppedBy': '怪物掉落'
        }
    
    def get_zodiac_stats(self, zodiac_item):
        if not zodiac_item or zodiac_item.get('type') != 'zodiac':
            return {'attack_min':0,'attack_max':0,'defense_min':0,'defense_max':0,'hp_bonus':0}
        return {
            'attack_min': zodiac_item.get('attackMin', 0),
            'attack_max': zodiac_item.get('attackMax', 0),
            'defense_min': zodiac_item.get('defenseMin', 0),
            'defense_max': zodiac_item.get('defenseMax', 0),
            'hp_bonus': zodiac_item.get('hpBonus', 0)
        }
    
    def reload_config(self):
        self._load_config()
        self._last_load = time.time()

zodiac_manager = ZodiacManager()