import 'package:flutter/material.dart'; import 'package:youmazgestion/Components/app_bar.dart'; import 'package:youmazgestion/Services/app_database.dart'; import 'package:youmazgestion/Models/role.dart'; class HandleUserRole extends StatefulWidget { const HandleUserRole({super.key}); @override State createState() => _HandleUserRoleState(); } class _HandleUserRoleState extends State { final db = AppDatabase.instance; List> roles = []; Map permissionsMap = {}; int? selectedRoleId; final TextEditingController _roleController = TextEditingController(); @override void initState() { super.initState(); _initData(); } Future _initData() async { final roleList = await db.database.then((db) => db.query('roles')); final perms = await db.getAllPermissions(); setState(() { roles = roleList; for (var perm in perms) { permissionsMap[perm.name] = false; } }); } Future _addRole() async { String designation = _roleController.text.trim(); if (designation.isEmpty) return; await db.createRole(Role(designation: designation)); _roleController.clear(); await _initData(); } Future _loadRolePermissions(int roleId) async { final rolePerms = await db.getPermissionsForRole(roleId); final allPerms = await db.getAllPermissions(); setState(() { selectedRoleId = roleId; permissionsMap = { for (var perm in allPerms) perm.name: rolePerms.any((rp) => rp.name == perm.name) }; }); } Future _onPermissionToggle(String permission, bool enabled) async { if (selectedRoleId == null) return; final allPerms = await db.getAllPermissions(); final perm = allPerms.firstWhere((p) => p.name == permission); if (enabled) { await db.assignPermission(selectedRoleId!, perm.id!); } else { await db.removePermission(selectedRoleId!, perm.id!); } setState(() { permissionsMap[permission] = enabled; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: const CustomAppBar(title: "Gestion des rôles"), body: Padding( padding: const EdgeInsets.all(16.0), child: Column( children: [ // ✅ Champ pour saisir un nouveau rôle Row( children: [ Expanded( child: TextField( controller: _roleController, decoration: const InputDecoration( labelText: 'Nouveau rôle', border: OutlineInputBorder(), ), ), ), const SizedBox(width: 10), ElevatedButton( onPressed: _addRole, child: const Text('Créer'), ), ], ), const SizedBox(height: 20), // 🔽 Sélection d'un rôle DropdownButton( isExpanded: true, hint: const Text("Choisir un rôle"), value: selectedRoleId, items: roles.map((role) { return DropdownMenuItem( value: role['id'] as int, child: Text(role['designation'] ?? ''), ); }).toList(), onChanged: (value) { if (value != null) _loadRolePermissions(value); }, ), const SizedBox(height: 16), // ✅ Permissions associées if (selectedRoleId != null) Expanded( child: ListView( children: permissionsMap.entries.map((entry) { return CheckboxListTile( title: Text(entry.key), value: entry.value, onChanged: (bool? value) { _onPermissionToggle(entry.key, value ?? false); }, ); }).toList(), ), ), ], ), ), ); } }