import 'package:equatable/equatable.dart';
import '../../models/group.dart';
import '../../models/group_member.dart';

abstract class GroupEvent extends Equatable {
  const GroupEvent();

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

// NOUVEAU : Charger les groupes par userId
class LoadGroupsByUserId extends GroupEvent {
  final String userId;

  const LoadGroupsByUserId(this.userId);

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

// Charger les groupes d'un voyage (conservé pour compatibilité)
class LoadGroupsByTrip extends GroupEvent {
  final String tripId;

  const LoadGroupsByTrip(this.tripId);

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

// Créer un groupe simple
class CreateGroup extends GroupEvent {
  final Group group;

  const CreateGroup(this.group);

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

// Créer un groupe avec ses membres
class CreateGroupWithMembers extends GroupEvent {
  final Group group;
  final List<GroupMember> members;

  const CreateGroupWithMembers({
    required this.group,
    required this.members,
  });

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

// Ajouter un membre
class AddMemberToGroup extends GroupEvent {
  final String groupId;
  final GroupMember member;

  const AddMemberToGroup(this.groupId, this.member);

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

// Supprimer un membre
class RemoveMemberFromGroup extends GroupEvent {
  final String groupId;
  final String userId;

  const RemoveMemberFromGroup(this.groupId, this.userId);

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

// Mettre à jour un groupe
class UpdateGroup extends GroupEvent {
  final String groupId;
  final Group group;

  const UpdateGroup(this.groupId, this.group);

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

// Supprimer un groupe
class DeleteGroup extends GroupEvent {
  final String tripId;

  const DeleteGroup(this.tripId);

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