import 'package:flutter/material.dart'; import 'package:p_tits_pas/models/assistante_maternelle_model.dart'; import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/widgets/admin/common/admin_list_header.dart'; import 'package:p_tits_pas/widgets/admin/common/admin_list_state.dart'; import 'package:p_tits_pas/widgets/admin/common/admin_user_card.dart'; class AssistanteMaternelleManagementWidget extends StatefulWidget { const AssistanteMaternelleManagementWidget({super.key}); @override State createState() => _AssistanteMaternelleManagementWidgetState(); } class _AssistanteMaternelleManagementWidgetState extends State { bool _isLoading = false; String? _error; List _assistantes = []; List _filteredAssistantes = []; final TextEditingController _zoneController = TextEditingController(); final TextEditingController _capacityController = TextEditingController(); @override void initState() { super.initState(); _loadAssistantes(); _zoneController.addListener(_filter); _capacityController.addListener(_filter); } @override void dispose() { _zoneController.dispose(); _capacityController.dispose(); super.dispose(); } Future _loadAssistantes() async { setState(() { _isLoading = true; _error = null; }); try { final list = await UserService.getAssistantesMaternelles(); if (!mounted) return; setState(() { _assistantes = list; _filter(); _isLoading = false; }); } catch (e) { if (!mounted) return; setState(() { _error = e.toString(); _isLoading = false; }); } } void _filter() { final zoneQuery = _zoneController.text.toLowerCase(); final capacityQuery = int.tryParse(_capacityController.text); setState(() { _filteredAssistantes = _assistantes.where((am) { final matchesZone = zoneQuery.isEmpty || (am.residenceCity?.toLowerCase().contains(zoneQuery) ?? false); final matchesCapacity = capacityQuery == null || (am.maxChildren != null && am.maxChildren! >= capacityQuery); return matchesZone && matchesCapacity; }).toList(); }); } @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ AdminListHeader( searchController: _zoneController, searchHint: 'Rechercher une zone géographique...', filters: _buildFilters(), ), const SizedBox(height: 16), AdminListState( isLoading: _isLoading, error: _error, isEmpty: _filteredAssistantes.isEmpty, emptyMessage: 'Aucune assistante maternelle trouvée.', list: ListView.builder( itemCount: _filteredAssistantes.length, itemBuilder: (context, index) { final assistante = _filteredAssistantes[index]; return AdminUserCard( title: assistante.user.fullName, avatarUrl: assistante.user.photoUrl, fallbackIcon: Icons.face, subtitleLines: [ assistante.user.email, 'N° Agrément : ${assistante.approvalNumber ?? 'N/A'}', 'Zone : ${assistante.residenceCity ?? 'N/A'} | Capacité : ${assistante.maxChildren ?? 0}', ], actions: [ IconButton( icon: const Icon(Icons.edit), tooltip: 'Modifier', onPressed: () { // TODO: Ajouter modification }, ), IconButton( icon: const Icon(Icons.delete), tooltip: 'Supprimer', onPressed: () { // TODO: Ajouter suppression }, ), ], ); }, ), ), ], ), ); } Widget _buildFilters() { return Wrap( spacing: 16, runSpacing: 8, children: [ SizedBox( width: 240, child: TextField( controller: _capacityController, decoration: const InputDecoration( labelText: 'Capacité minimum', border: OutlineInputBorder(), isDense: true, ), keyboardType: TextInputType.number, ), ), ], ); } }