export interface Permission {
    id: number
    code: string
    label: string
    module: string
    orphan: boolean
}

export interface Role {
    id: number
    code: string
    label: string
    description: string | null
    isSystem: boolean
    permissions: (Permission | string)[]
}

export interface UserListItem {
    id: number
    username: string
    isAdmin: boolean
    roles: string[]
    directPermissions: string[]
}

/**
 * Detail RBAC d'un user, renvoye par GET /api/users/{id}/rbac (groupe user:rbac:read).
 * Utilise par UserRbacDrawer pour initialiser son formulaire avec l'etat complet
 * (sites inclus). Le endpoint de liste /api/users reste volontairement leger et
 * n'expose pas ces champs.
 */
export interface UserRbacDetail {
    id: number
    isAdmin: boolean
    roles: string[]
    directPermissions: string[]
    sites: string[]
}

export interface EffectivePermission {
    code: string
    label: string
    module: string
    sources: string[]
}

/**
 * Groupement de permissions par module pour l'affichage en accordeon.
 * Construit cote consommateur a partir de la liste plate /api/permissions.
 */
export interface PermissionModule {
    module: string
    permissions: Permission[]
}
