from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session

from app.database import get_db
from app.dependencies import require_admin_token
from app.models import User
from app.schemas import ProfileUpdate, UserPublic

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


@router.get("", response_model=UserPublic)
def get_profile(me: User = Depends(require_admin_token)):
    return me


@router.patch("", response_model=UserPublic)
def update_profile(
    body: ProfileUpdate,
    db: Session = Depends(get_db),
    me: User = Depends(require_admin_token),
):
    if body.email and body.email != me.email:
        exists = db.query(User).filter(User.email == body.email).first()
        if exists:
            raise HTTPException(status_code=status.HTTP_409_CONFLICT, detail="Email already in use")
        me.email = str(body.email)
    if body.full_name is not None:
        me.full_name = body.full_name
    db.commit()
    db.refresh(me)
    return me
