from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session

from app.api.deps import get_current_user, require_admin
from app.db.session import get_db
from app.schemas.phase4 import UserCreate, UserResponse, UserUpdate
from app.schemas.user_context import CurrentUser
from app.services.agency_service import UserManagementService

router = APIRouter()


@router.get("", response_model=list[UserResponse])
def list_users(
    current_user: CurrentUser = Depends(require_admin),
    db: Session = Depends(get_db),
):
    return UserManagementService(db).list_users(current_user.agency_id)


@router.post("", response_model=UserResponse)
def create_user(
    payload: UserCreate,
    current_user: CurrentUser = Depends(require_admin),
    db: Session = Depends(get_db),
):
    return UserManagementService(db).create_user(current_user.agency_id, payload.model_dump())


@router.get("/{user_id}", response_model=UserResponse)
def get_user(
    user_id: int,
    current_user: CurrentUser = Depends(require_admin),
    db: Session = Depends(get_db),
):
    return UserManagementService(db).get_user(current_user.agency_id, user_id)


@router.patch("/{user_id}", response_model=UserResponse)
def update_user(
    user_id: int,
    payload: UserUpdate,
    current_user: CurrentUser = Depends(require_admin),
    db: Session = Depends(get_db),
):
    return UserManagementService(db).update_user(
        current_user.agency_id,
        user_id,
        payload.model_dump(exclude_unset=True),
        current_user.id,
    )


@router.delete("/{user_id}")
def delete_user(
    user_id: int,
    current_user: CurrentUser = Depends(require_admin),
    db: Session = Depends(get_db),
):
    UserManagementService(db).delete_user(current_user.agency_id, user_id, current_user.id)
    return {"message": "User removed successfully"}
