import 'package:immich_mobile/entities/album.entity.dart';
import 'package:immich_mobile/entities/asset.entity.dart';
import 'package:immich_mobile/entities/device_asset.entity.dart';
import 'package:immich_mobile/entities/user.entity.dart';

abstract interface class IAssetRepository {
  Future<Asset?> getByRemoteId(String id);
  Future<List<Asset>> getAllByRemoteId(Iterable<String> ids);
  Future<List<Asset>> getByAlbum(Album album, {User? notOwnedBy});
  Future<void> deleteById(List<int> ids);
  Future<List<Asset>> getAll({
    required int ownerId,
    bool? remote,
    int limit = 100,
  });
  Future<List<Asset>> updateAll(List<Asset> assets);

  Future<List<Asset>> getMatches({
    required List<Asset> assets,
    required int ownerId,
    bool? remote,
    int limit = 100,
  });

  Future<List<DeviceAsset?>> getDeviceAssetsById(List<Object> ids);
  Future<void> upsertDeviceAssets(List<DeviceAsset> deviceAssets);
}