import 'package:krow_domain/krow_domain.dart';

/// Interface for the Hub repository.
///
/// This repository defines the contract for hub-related operations in the
/// domain layer. It handles fetching, creating, deleting hubs and assigning
/// NFC tags. The implementation will be provided in the data layer.
abstract interface class HubRepositoryInterface {
  /// Fetches the list of hubs for the current client.
  ///
  /// Returns a list of [Hub] entities.
  Future<List<Hub>> getHubs();

  /// Creates a new hub.
  ///
  /// Takes the [name] and [address] of the new hub.
  /// Returns the created [Hub] entity.
  Future<Hub> createHub({
    required String name,
    required String address,
    String? placeId,
    double? latitude,
    double? longitude,
    String? city,
    String? state,
    String? street,
    String? country,
    String? zipCode,
  });

  /// Deletes a hub by its [id].
  Future<void> deleteHub(String id);

  /// Assigns an NFC tag to a hub.
  ///
  /// Takes the [hubId] and the [nfcTagId] to be associated.
  Future<void> assignNfcTag({required String hubId, required String nfcTagId});
}
