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

/// States pour les activités de la base de données
abstract class DbActivityState extends Equatable {
  const DbActivityState();

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

/// État initial
class DbActivityInitial extends DbActivityState {
  const DbActivityInitial();
}

/// État de chargement
class DbActivityLoading extends DbActivityState {
  const DbActivityLoading();
}

/// État de recherche
class DbActivitySearching extends DbActivityState {
  const DbActivitySearching();
}

/// État avec les activités chargées
class DbActivityLoaded extends DbActivityState {
  final List<Activity> activities;
  final List<String> tripParticipants;

  const DbActivityLoaded({
    required this.activities,
    required this.tripParticipants,
  });

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

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

/// État avec résultats de recherche
class DbActivitySearchResults extends DbActivityState {
  final List<Activity> results;
  final String query;
  final List<String> tripParticipants;

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

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

/// État de succès d'opération
class DbActivityOperationSuccess extends DbActivityState {
  final String message;

  const DbActivityOperationSuccess(this.message);

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

/// État d'erreur
class DbActivityError extends DbActivityState {
  final String message;

  const DbActivityError(this.message);

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