from fastapi import APIRouter

from app.api.deps import AdminDep, SessionDep
from app.api.serializers import dump
from app.core.response import success
from app.schemas import AdminOut, LoginRequest, PasswordChange, RefreshRequest
from app.services import AuthService

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


@router.post("/login")
async def login(payload: LoginRequest, session: SessionDep) -> dict:
    tokens = await AuthService(session).login(payload.username, payload.password)
    return success(tokens, "logged_in")


@router.post("/refresh")
async def refresh(payload: RefreshRequest, session: SessionDep) -> dict:
    return success(await AuthService(session).refresh(payload.refresh_token))


@router.post("/logout")
async def logout(_: AdminDep) -> dict:
    return success(None, "logged_out")


@router.get("/me")
async def me(admin: AdminDep) -> dict:
    return success(dump(AdminOut, admin))


@router.post("/password")
async def change_password(payload: PasswordChange, admin: AdminDep, session: SessionDep) -> dict:
    await AuthService(session).change_password(admin, payload.current_password, payload.new_password)
    return success(None, "password_changed")
