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/conversation_model.dart';
import 'package:p_tits_pas/models/m_dashbord/event_model.dart';
import 'package:p_tits_pas/models/m_dashbord/notification_model.dart';

class DashboardService {
  // URL de base de l'API
  static const String _baseUrl = 'YOUR_API_BASE_URL';

  // Récupérer la liste des enfants
  Future<List<ChildModel>> getChildren() async {
    try {
      // TODO: Implémenter l'appel API
      // Exemple de mock data pour le développement
      return [
        ChildModel(
          id: '1',
          firstName: 'Emma',
          birthDate: DateTime(2020, 5, 15),
          photoUrl: 'assets/images/child1.jpg',
          status: ChildStatus.onHoliday,
        ),
        ChildModel(
          id: '2',
          firstName: 'Lucas',
          birthDate: DateTime(2021, 3, 10),
          photoUrl: 'assets/images/child2.jpg',
          status: ChildStatus.searching,
        ),
      ];
    } catch (e) {
      throw Exception('Erreur lors de la récupération des enfants: $e');
    }
  }

  // Récupérer l'assistante maternelle pour un enfant
  Future<AssistantModel> getAssistantForChild(String childId) async {
    try {
      // TODO: Implémenter l'appel API
      return AssistantModel(
        id: 'am1',
        firstName: 'Marie',
        lastName: 'Dupont',
        hourlyRate: 10.0,
        dailyFees: 80.0,
        status: AssistantStatus.available,
        photoUrl: 'assets/images/assistant1.jpg',
        address: '123 rue des Lilas',
        phone: '0123456789',
      );
    } catch (e) {
      throw Exception('Erreur lors de la récupération de l\'assistante: $e');
    }
  }

  // Récupérer les événements pour un enfant
  Future<List<EventModel>> getEventsForChild(String childId) async {
    try {
      // TODO: Implémenter l'appel API
      return [
        EventModel(
          id: 'evt1',
          title: 'Rendez-vous médical',
          startDate: DateTime.now().add(const Duration(days: 2)),
          type: EventType.parentVacation,
          status: EventStatus.pending,
          description: 'Visite de routine',
          childId: childId,
        ),
      ];
    } catch (e) {
      throw Exception('Erreur lors de la récupération des événements: $e');
    }
  }

  // Récupérer tous les événements à venir
  Future<List<EventModel>> getUpcomingEvents() async {
    try {
      // TODO: Implémenter l'appel API
      return [
        EventModel(
          id: 'evt1',
          title: 'Activité peinture',
          startDate: DateTime.now().add(const Duration(days: 1)),
          endDate: DateTime.now().add(const Duration(days: 1, hours: 2)),
          type: EventType.parentVacation,
          status: EventStatus.pending,
          description: 'Atelier créatif',
          childId: '1',
        ),
      ];
    } catch (e) {
      throw Exception('Erreur lors de la récupération des événements: $e');
    }
  }

  // Récupérer les contrats
  Future<List<ContractModel>> getContracts() async {
    try {
      // TODO: Implémenter l'appel API
      return [
        ContractModel(
          id: 'contract1',
          childId: '1',
          assistantId: 'am1',
          startDate: DateTime(2023, 9, 1),
          endDate: DateTime(2024, 8, 31),
          status: ContractStatus.pending,
          hourlyRate: 10.0,
          createdAt: DateTime.now(),
        ),
      ];
    } catch (e) {
      throw Exception('Erreur lors de la récupération des contrats: $e');
    }
  }

  // Récupérer les contrats pour un enfant spécifique
  Future<List<ContractModel>> getContractsForChild(String childId) async {
    try {
      // TODO: Implémenter l'appel API
      return [
        ContractModel(
          id: 'contract1',
          childId: childId,
          assistantId: 'am1',
          startDate: DateTime(2023, 9, 1),
          endDate: DateTime(2024, 8, 31),
          status: ContractStatus.active,
          hourlyRate: 10.0,
          createdAt: DateTime.now(),
        ),
      ];
    } catch (e) {
      throw Exception('Erreur lors de la récupération des contrats: $e');
    }
  }

  // Récupérer les conversations
  Future<List<ConversationModel>> getConversations() async {
    try {
      // TODO: Implémenter l'appel API
      return [
        ConversationModel(
          id: 'conv1',
          title: 'Conversation avec Marie Dupont',
          participantIds: ['am1'],
          messages: [
            MessageModel(
              id: 'msg1',
              content: 'Bonjour, comment ça va ?',
              senderId: 'am1',
              sentAt: DateTime.now().subtract(const Duration(hours: 2)),
              status: MessageStatus.read,
            ),
            MessageModel(
              id: 'msg2',
              content: 'Tout va bien, merci !',
              senderId: 'parent1',
              sentAt: DateTime.now().subtract(const Duration(hours: 1, minutes: 30)),
              status: MessageStatus.read,
            ),
          ],
          lastMessageAt: DateTime.now().subtract(const Duration(hours: 2)),
          unreadCount: 2,
        ),
      ];
    } catch (e) {
      throw Exception('Erreur lors de la récupération des conversations: $e');
    }
  }

  // Récupérer les notifications
  Future<List<NotificationModel>> getNotifications() async {
    try {
      // TODO: Implémenter l'appel API
      return [
        NotificationModel(
          id: 'notif1',
          title: 'Nouveau message',
          createdAt: DateTime.now(),
          isRead: false,
          type: NotificationType.contractPending,
          content: 'Votre contrat est en attente',
        ),
      ];
    } catch (e) {
      throw Exception('Erreur lors de la récupération des notifications: $e');
    }
  }

  // Marquer une notification comme lue
  Future<void> markNotificationAsRead(String notificationId) async {
    try {
      // TODO: Implémenter l'appel API
    } catch (e) {
      throw Exception('Erreur lors du marquage de la notification: $e');
    }
  }
}