"""Maintenance tools endpoints."""

import base64
import json
from datetime import datetime, timezone
from io import BytesIO

from fastapi import APIRouter, Depends

from ..database import get_session
from ..models import AdminConfig, License
from ..security import require_roles
from ..utils import log_action

router = APIRouter()


@router.post("/rotate-keys")
def rotate_keys(session=Depends(get_session), _admin=Depends(require_roles("super-admin"))):
    log_action(session, _admin.email, "rotate_keys")
    session.commit()
    return {"message": "Rotation planifiée"}


@router.post("/maintenance-mode")
def maintenance_mode(enable: bool, session=Depends(get_session), _admin=Depends(require_roles("super-admin"))):
    log_action(session, _admin.email, "maintenance_mode", metadata={"enabled": enable})
    session.commit()
    return {"maintenance": enable}


@router.post("/backups")
def create_backup(session=Depends(get_session), _admin=Depends(require_roles("super-admin"))):
    licenses = session.query(License).all()
    configs = session.query(AdminConfig).all()
    snapshot = {
        "created_at": datetime.now(timezone.utc).isoformat(),
        "licenses": [
            {
                "email": item.email,
                "api_key": item.api_key,
                "tier": item.tier,
                "status": item.status,
                "expires_at": item.expires_at.isoformat() if item.expires_at else None,
            }
            for item in licenses
        ],
        "configs": {cfg.key: cfg.value for cfg in configs},
    }

    buffer = BytesIO(json.dumps(snapshot, indent=2).encode("utf-8"))
    encoded = base64.b64encode(buffer.getvalue()).decode("ascii")
    filename = f"backup_{datetime.now(timezone.utc).strftime('%Y%m%dT%H%M%SZ')}.json"

    log_action(session, _admin.email, "maintenance_backup", metadata={"filename": filename, "items": len(licenses)})
    session.commit()
    return {"filename": filename, "content_base64": encoded}
