import 'package:flutter/material.dart'; import 'package:p_tits_pas/models/m_dashbord/assistant_model.dart'; import 'package:p_tits_pas/models/m_dashbord/child_model.dart'; import 'package:p_tits_pas/models/m_dashbord/contract_model.dart'; import 'package:p_tits_pas/models/m_dashbord/event_model.dart'; class MainContentArea extends StatelessWidget { final ChildModel? selectedChild; final AssistantModel? selectedAssistant; final List events; final List contracts; final bool showOnlyCalendar; final bool showOnlyContracts; const MainContentArea({ Key? key, this.selectedChild, this.selectedAssistant, required this.events, required this.contracts, this.showOnlyCalendar = false, this.showOnlyContracts = false, }) : super(key: key); @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(24), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if (!showOnlyCalendar && !showOnlyContracts) ...[ if (selectedAssistant != null) _buildAssistantProfile(), const SizedBox(height: 24), ], if (showOnlyContracts || (!showOnlyCalendar && !showOnlyContracts)) ...[ _buildContractsSection(), if (!showOnlyContracts) const SizedBox(height: 24), ], if (showOnlyCalendar || (!showOnlyCalendar && !showOnlyContracts)) ...[ Expanded(child: _buildCalendarSection()), ], ], ), ); } Widget _buildAssistantProfile() { if (selectedAssistant == null) { return _buildSearchAssistantCard(); } return Container( width: double.infinity, padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.1), spreadRadius: 1, blurRadius: 6, offset: const Offset(0, 2), ), ], ), child: Row( children: [ Container( width: 80, height: 80, decoration: BoxDecoration( color: const Color(0xFF9CC5C0), borderRadius: BorderRadius.circular(12), ), child: const Icon( Icons.person, color: Colors.white, size: 40, ), ), const SizedBox(width: 20), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( selectedAssistant!.fullName, style: const TextStyle( fontSize: 18, fontWeight: FontWeight.w600, ), ), const SizedBox(height: 8), Row( children: [ Text( 'Taux horaire : ${selectedAssistant!.hourlyRateFormatted}', style: const TextStyle( fontSize: 14, color: Colors.grey, ), ), const SizedBox(width: 20), Text( 'Frais journaliers : ${selectedAssistant!.dailyFeesFormatted}', style: const TextStyle( fontSize: 14, color: Colors.grey, ), ), ], ), ], ), ), ElevatedButton( onPressed: () { // TODO: Navigation vers le contrat }, style: ElevatedButton.styleFrom( backgroundColor: const Color(0xFF9CC5C0), foregroundColor: Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), child: const Text('Voir le contrat'), ), ], ), ); } Widget _buildSearchAssistantCard() { return Container( width: double.infinity, padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), border: Border.all(color: Colors.grey.shade300), ), child: Column( children: [ Icon( Icons.search, size: 48, color: Colors.grey.shade400, ), const SizedBox(height: 16), const Text( 'Aucune assistante maternelle assignée', style: TextStyle( fontSize: 16, fontWeight: FontWeight.w500, ), ), const SizedBox(height: 8), Text( 'Trouvez une assistante maternelle pour votre enfant', style: TextStyle( fontSize: 14, color: Colors.grey.shade600, ), ), const SizedBox(height: 16), ElevatedButton( onPressed: () { // TODO: Navigation vers la recherche }, style: ElevatedButton.styleFrom( backgroundColor: const Color(0xFF9CC5C0), foregroundColor: Colors.white, ), child: const Text('Rechercher une assistante maternelle'), ), ], ), ); } Widget _buildCalendarSection() { return Container( padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.1), spreadRadius: 1, blurRadius: 6, offset: const Offset(0, 2), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Planning de garde pour ${selectedChild?.firstName ?? "votre enfant"}', style: const TextStyle( fontSize: 18, fontWeight: FontWeight.w600, ), ), TextButton( onPressed: () { // TODO: Mode sélection de plage }, child: const Text('Mode sélection de plage'), ), ], ), const SizedBox(height: 20), Expanded( child: _buildCalendar(), ), ], ), ); } Widget _buildCalendar() { // Placeholder pour le calendrier - sera développé dans FRONT-11 return const Center( child: Text( 'Calendrier à implémenter\n(FRONT-11)', textAlign: TextAlign.center, style: TextStyle( fontSize: 16, color: Colors.grey, ), ), ); } Widget _buildContractsSection() { return Container( padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.1), spreadRadius: 1, blurRadius: 6, offset: const Offset(0, 2), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( 'Contrats', style: TextStyle( fontSize: 18, fontWeight: FontWeight.w600, ), ), const SizedBox(height: 16), if (contracts.isEmpty) const Text( 'Aucun contrat en cours', style: TextStyle(color: Colors.grey), ) else ...contracts.map((contract) => _buildContractItem(contract)), ], ), ); } Widget _buildContractItem(ContractModel contract) { return Padding( padding: const EdgeInsets.symmetric(vertical: 8), child: Row( children: [ Container( width: 12, height: 12, decoration: BoxDecoration( color: _getContractStatusColor(contract.status), borderRadius: BorderRadius.circular(6), ), ), const SizedBox(width: 12), Expanded( child: Text(contract.statusLabel), ), if (contract.needsSignature) TextButton( onPressed: () { // TODO: Action signature }, child: const Text('Signer'), ), ], ), ); } Color _getContractStatusColor(ContractStatus status) { switch (status) { case ContractStatus.draft: return Colors.grey; case ContractStatus.pending: return Colors.orange; case ContractStatus.active: return Colors.green; case ContractStatus.ended: return Colors.blue; case ContractStatus.cancelled: return Colors.red; } } }