from typing import List

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

from src.infrastructure.database.connection import get_db
from src.infrastructure.repositories.sql_user_repository import SqlUserRepository
from src.application.use_cases.get_relationship_managers import GetRelationshipManagersUseCase
from src.core.rbac.rbac_dependency import require_permission
from src.core.rbac.permissions_registry import Perm

router = APIRouter()


class RelationshipManagerResponse(BaseModel):
    id: int
    name: str


@router.get(
    "/relationship-managers",
    response_model=List[RelationshipManagerResponse],
    tags=["users"],
    dependencies=[Depends(require_permission(Perm.MERCHANTS_VIEW))],
)
def list_relationship_managers(db: Session = Depends(get_db)):
    """
    Returns all active users eligible to be Relationship Managers.
    Mirrors Laravel: User::where('user_type','>=',5)->whereNull('deleted_at')->get(['id','name'])
    Excludes user_type 48 and 49.
    """
    repo = SqlUserRepository(db)
    users = GetRelationshipManagersUseCase(repo).execute()
    return [
        RelationshipManagerResponse(id=u.id, name=u.name or u.username or "")
        for u in users
    ]
