from fastapi import APIRouter, Cookie, Depends, Request, Response
from sqlalchemy.orm import Session as OrmSession

from app.api.deps import get_db, get_current_user
from app.models.catalog import UserAccount
from app.schemas.auth import LoginRequest, UserResponse
from app.services.auth_service import AuthService

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


@router.post("/login", response_model=UserResponse)
def login(body: LoginRequest, request: Request, response: Response, db: OrmSession = Depends(get_db)):
    service = AuthService(db)
    ip = request.client.host if request.client else None
    user, token = service.login(body.username, body.password, ip)
    is_https = request.url.scheme == "https"
    response.set_cookie(
        key="session",
        value=token,
        httponly=True,
        secure=is_https,
        samesite="lax",
        max_age=86400,
    )
    return user


@router.post("/logout")
def logout(
    request: Request,
    response: Response,
    current_user: UserAccount = Depends(get_current_user),
    session_token: str | None = Cookie(default=None, alias="session"),
    db: OrmSession = Depends(get_db),
):
    service = AuthService(db)
    ip = request.client.host if request.client else None
    service.logout(session_token, current_user.id, ip)
    response.delete_cookie(key="session")
    return {"ok": True}


@router.get("/me", response_model=UserResponse)
def me(current_user: UserAccount = Depends(get_current_user)):
    return current_user
