import '../entities/pokemon.dart';

/// Contrat d'accès aux données Pokémon. L'UI et le domaine ne connaissent que cette interface.
abstract interface class PokemonRepository {
  /// Tous les Pokémon (DB locale d'abord, complétée par l'API si nécessaire).
  Future<List<Pokemon>> getAll();

  /// Un Pokémon par id (DB d'abord, sinon API + mise en cache). `null` si introuvable.
  Future<Pokemon?> getById(int id);

  /// Insère/remplace une liste de Pokémon.
  Future<void> saveAll(List<Pokemon> pokemons);

  /// Met à jour un Pokémon existant.
  Future<void> update(Pokemon pokemon);

  /// Nombre de Pokémon attrapés.
  Future<int> caughtCount();

  /// Nombre de Pokémon vus.
  Future<int> seenCount();
}
