from fastapi import APIRouter, Depends
from pydantic import BaseModel
from sqlalchemy.orm import Session

from flyway.api.deps import current_actor, get_db
from flyway.api.views import user_out
from flyway.auth.service import update_profile
from flyway.domain.actor import Actor
from flyway.models import AppUser

router = APIRouter(prefix="/api/account")


class ProfileIn(BaseModel):
    first_name: str = ""
    last_name: str = ""
    email: str = ""
    mobile: str = ""


@router.get("")
def profile(db: Session = Depends(get_db), actor: Actor = Depends(current_actor)):
    return user_out(db.get(AppUser, actor.user_id))


@router.put("")
def update(body: ProfileIn, db: Session = Depends(get_db), actor: Actor = Depends(current_actor)):
    user = update_profile(db, db.get(AppUser, actor.user_id), **body.model_dump())
    db.commit()
    return user_out(user)
