# clear_redis_windows.py
import redis
import sys

def clear_rq_data():
    """Clear all RQ data from Redis"""
    try:
        # Connect to Redis
        r = redis.Redis(host='localhost', port=6379, db=0)
        
        # Test connection
        r.ping()
        print("✅ Connected to Redis")
        
        # Get all keys
        print("Scanning for RQ keys...")
        
        # Method 1: Using scan_iter (safer for large databases)
        rq_keys = []
        for key in r.scan_iter(match="rq:*"):
            key_str = key.decode('utf-8') if isinstance(key, bytes) else key
            rq_keys.append(key_str)
        
        # Method 2: Direct keys() (faster for small DBs)
        # rq_keys = [k.decode('utf-8') for k in r.keys('rq:*')]
        
        print(f"Found {len(rq_keys)} RQ keys")
        
        if not rq_keys:
            print("No RQ keys found")
            return
        
        # Delete in batches to avoid blocking
        batch_size = 100
        for i in range(0, len(rq_keys), batch_size):
            batch = rq_keys[i:i+batch_size]
            r.delete(*batch)
            print(f"Deleted batch {i//batch_size + 1}: {len(batch)} keys")
        
        # Also delete audio queue keys if using simple queue
        audio_keys = [k.decode('utf-8') for k in r.keys('audio:*')]
        if audio_keys:
            r.delete(*audio_keys)
            print(f"Deleted {len(audio_keys)} audio queue keys")
        
        print(f"✅ Total deleted: {len(rq_keys) + len(audio_keys)} keys")
        
        # Verify
        remaining = [k.decode('utf-8') for k in r.keys('rq:*')]
        if remaining:
            print(f"⚠️ Still have {len(remaining)} RQ keys")
        else:
            print("✅ All RQ keys cleared")
            
    except redis.ConnectionError:
        print("❌ Could not connect to Redis. Is it running?")
        print("   Start Redis with: redis-server")
    except Exception as e:
        print(f"❌ Error: {e}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    clear_rq_data()
    
    # Ask to restart worker
    print("\n🔄 Now restart your worker:")
    print("1. Press Ctrl+C to stop current worker")
    print("2. Run: python run_worker_service.py")
    
    # Optional: Auto-restart
    restart = input("\nRestart worker now? (y/n): ").lower()
    if restart == 'y':
        import subprocess
        print("Starting worker...")
        #subprocess.Popen(["python", "run_worker_service.py"])
        import sys
        subprocess.Popen([sys.executable, "run_worker_service.py"])