import requests
import os
from datetime import datetime
import hashlib

def get_user_color(user_id):
    if user_id is None:
        return 0x888888
    hash_object = hashlib.md5(str(user_id).encode())
    hex_color = hash_object.hexdigest()[:6]
    return int(hex_color, 16)

def get_action_emoji(action, details=None):
    action = (action or '').lower()
    if 'microsoft' in (details or '').lower():
        return '🔑'
    if 'login' in action:
        return '🔑'   
    if 'mensagem' in action or 'message' in action:
        return '💬'  
    return '📝'     

def format_datetime(dt):
    if not dt:
        dt = datetime.utcnow()
    if isinstance(dt, str):
        try:
            dt = datetime.fromisoformat(dt)
        except Exception:
            return dt
    return dt.strftime('%d/%m/%Y %H:%M:%S')

def send_discord_audit_log(action, user_id=None, object_type=None, object_id=None, details=None, ip_address=None, created_at=None, extra_fields=None):
    webhook_url = os.getenv("URL_WEBHOOK")
    if not webhook_url:
        print("[DISCORD AUDIT] URL_WEBHOOK not set!")
        return
    color = get_user_color(user_id)
    emoji = get_action_emoji(action, details)
    username = object_type or f"Usuário {user_id}" or "Usuário"
    title = f"{emoji} {action.capitalize()}"
    description = details or '-'
    fields = [
        {"name": "🧑 Usuário", "value": f"{username} (ID: {user_id})", "inline": True},
    ]
    if object_type and object_type.lower() not in [str(username).lower(), 'user', 'usuário']:
        fields.append({"name": "📦 Objeto", "value": f"{object_type} ({object_id or '-'})", "inline": True})
    fields.extend([
        {"name": "🌐 IP", "value": str(ip_address or '-') , "inline": True},
        {"name": "📅 Data", "value": format_datetime(created_at), "inline": True},
    ])
    if extra_fields and isinstance(extra_fields, list):
        fields.extend(extra_fields)
    embed = {
        "title": title,
        "description": description,
        "color": color,
        "fields": fields,
        "timestamp": datetime.utcnow().isoformat()
    }
    data = {"embeds": [embed]}
    print(f"[DISCORD AUDIT] Webhook URL: {webhook_url}")
    print(f"[DISCORD AUDIT] Payload: {data}")
    try:
        resp = requests.post(webhook_url, json=data, timeout=5)
        print(f"[DISCORD AUDIT] Response: {resp.status_code} {resp.text}")
        resp.raise_for_status()
    except Exception as e:
        print(f"[DISCORD AUDIT] Falha ao enviar log para Discord: {e}") 