import secrets
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from app.models.client import Client
from app.models.audit import AuditLog
from app.models.database import get_db
from app.security.auth import hash_api_key
from app.security.dependencies import get_jwt_client, get_session_client
from app.schemas.api import MeResponse, AuditLogResponse, RegenerateKeyResponse

router = APIRouter(tags=["account"])


@router.get("/me", response_model=MeResponse)
def me(client: Client = Depends(get_jwt_client)):
    return MeResponse(
        client_id=client.id,
        name=client.name,
        api_key_preview=client.api_key_preview,
        credits_remaining=client.credits_remaining,
        credits_expire_at=client.credits_expire_at,
    )


@router.post("/me/regenerate-key", response_model=RegenerateKeyResponse)
def regenerate_own_key(
    db: Session = Depends(get_db),
    client: Client = Depends(get_session_client),
):
    api_key = "sk_live_" + secrets.token_urlsafe(32)
    client.api_key_hash = hash_api_key(api_key)
    client.api_key_preview = api_key[-8:]
    db.commit()
    return RegenerateKeyResponse(api_key=api_key, api_key_preview=client.api_key_preview)


@router.get("/me/logs", response_model=list[AuditLogResponse])
def my_logs(
    page: int = 1,
    limit: int = 50,
    db: Session = Depends(get_db),
    client: Client = Depends(get_jwt_client),
):
    limit = min(limit, 100)
    offset = (page - 1) * limit
    return (
        db.query(AuditLog)
        .filter(AuditLog.client_id == client.id)
        .order_by(AuditLog.timestamp.desc())
        .offset(offset)
        .limit(limit)
        .all()
    )
