import 'package:niogu_app/features/outlets/domain/entities/outlet.dart';
import 'package:niogu_app/features/stock_in/domain/entities/stock_in_transfer.dart';

abstract class IOutletRepository {
  Future<bool> fetchIsMainOutlet();

  Stream<List<UserDeletedByOutlet>> watchUserDeletedByOutlet();

  Stream<int> watchLimitOutlet();

  Stream<List<DisplayOutlet>> watchDisplayOutlets();

  Future<OutletDetail> getOutletById(String id);

  Future<MainOutlet> getMainOutlet();

  Stream<List<StaffAdminDetail>> watchStaffAdmins(String outletId);

  Future<bool> validatePhoneAndEmail({
    required String phoneNumber,
    String? email,
    String? excludeId,
  });

  Future<bool> validateAddUserStaff({
    required String firstPhoneNumber,
    required String firstEmail,
    String? secondPhoneNumber,
    String? secondEmail,
  });

  Future<void> saveStaffAdmin({
    required String outletId,
    UpsertStaffAdmin? firstStaffAdmin,
    UpsertStaffAdmin? secondStaffAdmin,
  });

  Future<int> deleteStaffAdmin(String userId);

  Future<void> saveOutlet(UpsertOutlet upsertOutlet);

  Future<void> deleteOutlet(String outletId);

  Stream<List<Outlet>> watchOutlets();

  Stream<List<SourceOutlet>> watchSourceOutlets(
    String currentOutletId,
    bool isShowAll,
  );
}
