import 'package:krow/features/shifts/data/models/staff_shift.dart';
import 'package:krow/features/shifts/domain/shift_entity.dart';
import 'package:krow/features/shifts/presentation/dialogs/complete_dialog/shift_complete_dialog.dart';

enum ShiftStatusFilterType { assigned, confirmed, ongoing, completed, canceled }

abstract class ShiftsRepository {
  Stream<EventShiftRoleStaffStatus> get statusStream;

  Future<List<ShiftEntity>> getShifts(
      {String? lastItemId, required ShiftStatusFilterType statusFilter});

  Future<void> confirmShift(ShiftEntity shiftViewModel);

  Future<void> clockInShift(ShiftEntity shiftViewModel);

  Future<void> completeShift(
      ShiftEntity shiftViewModel, ClockOutDetails clockOutDetails,bool isPast);

  Future<void> forceClockOut(String id);

  void dispose();

  declineShift(
      ShiftEntity shiftViewModel, String? reason, String? additionalReason);

  cancelShift(
      ShiftEntity shiftViewModel, String? reason, String? additionalReason);

  Future<ShiftEntity?> getShiftById(String id);

  Future<List<ShiftEntity>> getMissBreakFinishedShift();
}
