import 'package:flutter/material.dart'; import 'package:p_tits_pas/models/enfant_admin_model.dart'; import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/widgets/admin/common/admin_child_detail_modal.dart'; import 'package:p_tits_pas/widgets/admin/common/admin_user_card.dart'; import 'package:p_tits_pas/widgets/admin/common/user_list.dart'; /// Onglet liste globale des enfants (doc 28 §6.2, ticket #137). class EnfantManagementWidget extends StatefulWidget { final String searchQuery; final String? statusFilter; const EnfantManagementWidget({ super.key, required this.searchQuery, this.statusFilter, }); @override State createState() => _EnfantManagementWidgetState(); } class _EnfantManagementWidgetState extends State { bool _isLoading = false; String? _error; List _enfants = []; @override void initState() { super.initState(); _loadEnfants(); } Future _loadEnfants() async { setState(() { _isLoading = true; _error = null; }); try { final list = await UserService.getEnfants(); if (!mounted) return; setState(() { _enfants = list; _isLoading = false; }); } catch (e) { if (!mounted) return; setState(() { _error = e.toString(); _isLoading = false; }); } } String _statusLabel(String status) { switch (status) { case 'a_naitre': return 'À naître'; case 'actif': return 'Actif'; case 'scolarise': return 'Scolarisé'; default: return status; } } Future _openEnfant(EnfantAdminModel enfant) async { await showDialog( context: context, builder: (ctx) => AdminChildDetailModal( enfant: enfant, onSaved: _loadEnfants, ), ); } @override Widget build(BuildContext context) { final query = widget.searchQuery.toLowerCase(); final filtered = _enfants.where((e) { final matchesName = e.fullName.toLowerCase().contains(query); final matchesStatus = widget.statusFilter == null || e.status == widget.statusFilter; return matchesName && matchesStatus; }).toList(); return UserList( isLoading: _isLoading, error: _error, isEmpty: filtered.isEmpty, emptyMessage: 'Aucun enfant trouvé.', itemCount: filtered.length, itemBuilder: (context, index) { final enfant = filtered[index]; final parents = enfant.parentLinks .map((l) => l.parentName ?? 'Parent') .join(', '); return AdminUserCard( title: enfant.fullName, fallbackIcon: Icons.child_care_outlined, avatarUrl: enfant.photoUrl, subtitleLines: [ 'Statut : ${_statusLabel(enfant.status)}', if (enfant.birthDate != null && enfant.birthDate!.isNotEmpty) 'Naissance : ${enfant.birthDate}', if (parents.isNotEmpty) 'Responsables : $parents', ], actions: [ IconButton( icon: const Icon(Icons.visibility_outlined), tooltip: 'Voir / modifier', onPressed: () => _openEnfant(enfant), ), ], ); }, ); } }