/// Événements pour le BLoC des événements
library evenements_event;

import 'package:equatable/equatable.dart';
import '../data/models/evenement_model.dart';

/// Classe de base pour tous les événements
abstract class EvenementsEvent extends Equatable {
  const EvenementsEvent();

  @override
  List<Object?> get props => [];
}

/// Événement pour charger la liste des événements
class LoadEvenements extends EvenementsEvent {
  final int page;
  final int size;
  final String? recherche;
  final bool refresh;

  const LoadEvenements({
    this.page = 0,
    this.size = 20,
    this.recherche,
    this.refresh = false,
  });

  @override
  List<Object?> get props => [page, size, recherche, refresh];
}

/// Événement pour charger un événement par ID
class LoadEvenementById extends EvenementsEvent {
  final String id;

  const LoadEvenementById(this.id);

  @override
  List<Object?> get props => [id];
}

/// Événement pour créer un nouvel événement
class CreateEvenement extends EvenementsEvent {
  final EvenementModel evenement;

  const CreateEvenement(this.evenement);

  @override
  List<Object?> get props => [evenement];
}

/// Événement pour mettre à jour un événement
class UpdateEvenement extends EvenementsEvent {
  final String id;
  final EvenementModel evenement;

  const UpdateEvenement(this.id, this.evenement);

  @override
  List<Object?> get props => [id, evenement];
}

/// Événement pour supprimer un événement
class DeleteEvenement extends EvenementsEvent {
  final String id;

  const DeleteEvenement(this.id);

  @override
  List<Object?> get props => [id];
}

/// Événement pour charger les événements à venir
class LoadEvenementsAVenir extends EvenementsEvent {
  final int page;
  final int size;

  const LoadEvenementsAVenir({
    this.page = 0,
    this.size = 20,
  });

  @override
  List<Object?> get props => [page, size];
}

/// Événement pour charger les événements en cours
class LoadEvenementsEnCours extends EvenementsEvent {
  final int page;
  final int size;

  const LoadEvenementsEnCours({
    this.page = 0,
    this.size = 20,
  });

  @override
  List<Object?> get props => [page, size];
}

/// Événement pour charger les événements passés
class LoadEvenementsPasses extends EvenementsEvent {
  final int page;
  final int size;

  const LoadEvenementsPasses({
    this.page = 0,
    this.size = 20,
  });

  @override
  List<Object?> get props => [page, size];
}

/// Événement pour s'inscrire à un événement
class InscrireEvenement extends EvenementsEvent {
  final String evenementId;

  const InscrireEvenement(this.evenementId);

  @override
  List<Object?> get props => [evenementId];
}

/// Événement pour se désinscrire d'un événement
class DesinscrireEvenement extends EvenementsEvent {
  final String evenementId;

  const DesinscrireEvenement(this.evenementId);

  @override
  List<Object?> get props => [evenementId];
}

/// Événement pour charger les participants
class LoadParticipants extends EvenementsEvent {
  final String evenementId;

  const LoadParticipants(this.evenementId);

  @override
  List<Object?> get props => [evenementId];
}

/// Événement pour charger les statistiques
class LoadEvenementsStats extends EvenementsEvent {
  const LoadEvenementsStats();
}

