from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from typing import List
from ..database import get_db
from ..models import RolePagePermission
from ..schemas import RolePagePermissionOut, RolePagePermissionSet
from ..dependencies import require_super_admin

router = APIRouter()

VALID_ROLES = {'OWNER', 'MANAGER'}


@router.get("/role-permissions", response_model=List[RolePagePermissionOut])
def get_role_permissions(
    db: Session = Depends(get_db),
    _=Depends(require_super_admin),
):
    return (
        db.query(RolePagePermission)
        .order_by(RolePagePermission.role, RolePagePermission.module)
        .all()
    )


@router.put("/role-permissions", response_model=List[RolePagePermissionOut])
def set_role_permissions(
    body: List[RolePagePermissionSet],
    db: Session = Depends(get_db),
    _=Depends(require_super_admin),
):
    for item in body:
        if item.role not in VALID_ROLES:
            continue
        rp = db.query(RolePagePermission).filter_by(
            role=item.role, module=item.module
        ).first()
        if rp:
            rp.can_access = item.can_access
        else:
            db.add(RolePagePermission(
                role=item.role, module=item.module, can_access=item.can_access
            ))
    db.commit()
    return (
        db.query(RolePagePermission)
        .order_by(RolePagePermission.role, RolePagePermission.module)
        .all()
    )
