import 'package:equatable/equatable.dart';
import '../../../models/activity.dart';

/// States pour les activités approuvées par tous les participants
abstract class ApprovedActivityState extends Equatable {
  const ApprovedActivityState();

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

/// État initial
class ApprovedActivityInitial extends ApprovedActivityState {
  const ApprovedActivityInitial();
}

/// État de chargement
class ApprovedActivityLoading extends ApprovedActivityState {
  const ApprovedActivityLoading();
}

/// État de recherche
class ApprovedActivitySearching extends ApprovedActivityState {
  const ApprovedActivitySearching();
}

/// État avec les activités approuvées chargées
class ApprovedActivityLoaded extends ApprovedActivityState {
  final List<Activity> approvedActivities;
  final List<String> tripParticipants;

  const ApprovedActivityLoaded({
    required this.approvedActivities,
    required this.tripParticipants,
  });

  @override
  List<Object?> get props => [approvedActivities, tripParticipants];

  /// Créer une copie avec des modifications
  ApprovedActivityLoaded copyWith({
    List<Activity>? approvedActivities,
    List<String>? tripParticipants,
  }) {
    return ApprovedActivityLoaded(
      approvedActivities: approvedActivities ?? this.approvedActivities,
      tripParticipants: tripParticipants ?? this.tripParticipants,
    );
  }
}

/// État avec résultats de recherche approuvées
class ApprovedActivitySearchResults extends ApprovedActivityState {
  final List<Activity> results;
  final String query;
  final List<String> tripParticipants;

  const ApprovedActivitySearchResults({
    required this.results,
    required this.query,
    required this.tripParticipants,
  });

  @override
  List<Object?> get props => [results, query, tripParticipants];
}

/// État d'erreur
class ApprovedActivityError extends ApprovedActivityState {
  final String message;

  const ApprovedActivityError(this.message);

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