import 'package:krow_domain/krow_domain.dart';

/// Interface for the Shifts Repository.
///
/// Defines the contract for accessing and modifying shift-related data.
/// Implementations of this interface should reside in the data layer.
abstract interface class ShiftsRepositoryInterface {
  /// Retrieves the list of shifts assigned to the current user.
  Future<List<Shift>> getMyShifts();

  /// Retrieves available shifts matching the given [query] and [type].
  Future<List<Shift>> getAvailableShifts(String query, String type);

  /// Retrieves shifts that are pending acceptance by the user.
  Future<List<Shift>> getPendingAssignments();

  /// Retrieves detailed information for a specific shift by [shiftId].
  Future<Shift?> getShiftDetails(String shiftId);

  /// Applies for a specific open shift.
  /// 
  /// [isInstantBook] determines if the application should be immediately accepted.
  Future<void> applyForShift(String shiftId, {bool isInstantBook = false});

  /// Accepts a pending shift assignment.
  Future<void> acceptShift(String shiftId);

  /// Declines a pending shift assignment.
  Future<void> declineShift(String shiftId);

  /// Retrieves shifts that were cancelled for the current user.
  Future<List<Shift>> getCancelledShifts();

  /// Retrieves completed shifts for the current user.
  Future<List<Shift>> getHistoryShifts();
}
