import redis
import json
import random

class KeyManager:
    def __init__(self):
        self.r = redis.Redis(
            host='10.99.0.3', 
            port=6379, 
            password='clube67_dragonfly_pass_9903', 
            db=0,
            decode_responses=True
        )
        self.pool_key = 'swarm:keys:pool'

    def get_key(self, provider):
        """Busca uma chave ativa para o provedor (google ou anthropic)"""
        pool_data = self.r.get(self.pool_key)
        if not pool_data:
            return None
        
        pool = json.loads(pool_data)
        keys = pool.get(provider, [])
        
        # Filtra apenas as chaves ativas
        active_keys = [k for k in keys if k.get('status') == 'active']
        
        if not active_keys:
            print(f" [!] Erro: Nenhuma chave ativa para {provider}")
            return None
        
        # Seleciona uma chave aleatória do pool ativo (Load Balancing)
        selected = random.choice(active_keys)
        return selected['key']

    def report_failure(self, provider, failed_key):
        """Marca uma chave como inativa caso falhe (ex: sem saldo)"""
        pool_data = self.r.get(self.pool_key)
        pool = json.loads(pool_data)
        
        for k in pool.get(provider, []):
            if k['key'] == failed_key:
                k['status'] = 'inactive'
                print(f" [W] Chave {failed_key[:10]}... marcada como INATIVA.")
        
        self.r.set(self.pool_key, json.dumps(pool))

# Exemplo de uso:
# km = KeyManager()
# key = km.get_key('google')
