#!/usr/bin/env python3
"""
IDS Auto-Blocking Script
Rileva e blocca automaticamente IP con risk_score >= 80
Eseguito periodicamente da systemd timer (ogni 5 minuti)
"""
import requests
import sys
from datetime import datetime

ML_API_URL = "http://localhost:8000"

def auto_block():
    """Esegue detection e blocking automatico degli IP critici"""
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    print(f"[{timestamp}] 🔍 Starting auto-block detection...")
    
    try:
        # Chiama endpoint ML /detect con auto_block=true
        response = requests.post(
            f"{ML_API_URL}/detect",
            json={
                "max_records": 5000,        # Analizza ultimi 5000 log
                "hours_back": 1.0,          # Ultima ora
                "risk_threshold": 80.0,     # Solo IP critici (score >= 80)
                "auto_block": True          # BLOCCA AUTOMATICAMENTE
            },
            timeout=120  # 2 minuti timeout
        )
        
        if response.status_code == 200:
            data = response.json()
            detections = len(data.get("detections", []))
            blocked = data.get("blocked", 0)
            
            if blocked > 0:
                print(f"✓ Detection completata: {detections} anomalie rilevate, {blocked} IP bloccati")
            else:
                print(f"✓ Detection completata: {detections} anomalie rilevate, nessun nuovo IP da bloccare")
            
            return 0
        else:
            print(f"✗ API error: HTTP {response.status_code}")
            print(f"   Response: {response.text}")
            return 1
            
    except requests.exceptions.ConnectionError:
        print("✗ ERRORE: ML Backend non raggiungibile su http://localhost:8000")
        print("   Verifica che ids-ml-backend.service sia attivo:")
        print("   sudo systemctl status ids-ml-backend")
        return 1
    except requests.exceptions.Timeout:
        print("✗ ERRORE: Timeout dopo 120 secondi. Detection troppo lenta?")
        return 1
    except Exception as e:
        print(f"✗ ERRORE imprevisto: {type(e).__name__}: {e}")
        import traceback
        traceback.print_exc()
        return 1

if __name__ == "__main__":
    exit_code = auto_block()
    sys.exit(exit_code)
