from fastapi import APIRouter, Depends, Header
from pydantic import BaseModel, Field
from sqlmodel import Session

from app.db.session import get_session
from app.services.admin_auth import get_admin_session, login_admin, logout_admin

router = APIRouter(prefix="/admin/auth", tags=["admin-auth"])


class AdminLoginRequest(BaseModel):
    pin: str = Field(min_length=1, max_length=32)


@router.post("/login")
def post_admin_login(payload: AdminLoginRequest, session: Session = Depends(get_session)) -> dict:
    return login_admin(session, payload.pin)


@router.get("/me")
def get_admin_me(
    x_admin_session: str | None = Header(default=None, alias="X-Admin-Session"),
    session: Session = Depends(get_session),
) -> dict:
    admin_session = get_admin_session(session, x_admin_session)
    return {"authenticated": True, "username": admin_session.username, "expires_at": admin_session.expires_at.isoformat()}


@router.post("/logout")
def post_admin_logout(
    x_admin_session: str | None = Header(default=None, alias="X-Admin-Session"),
    session: Session = Depends(get_session),
) -> dict:
    return logout_admin(session, x_admin_session)
