content: import 'package:bb_mobile/core/blockchain/domain/usecases/broadcast_bitcoin_transaction_usecase.dart';
  import 'package:bb_mobile/core/blockchain/domain/usecases/broadcast_liquid_transaction_usecase.dart';
  import 'package:bb_mobile/core/exchange/domain/repositories/exchange_order_repository.dart';
  import 'package:bb_mobile/core/exchange/domain/usecases/convert_sats_to_currency_amount_usecase.dart';
  import 'package:bb_mobile/core/exchange/domain/usecases/create_fiat_recipient_usecase.dart';
  import 'package:bb_mobile/core/exchange/domain/usecases/get_exchange_user_summary_usecase.dart';
  import 'package:bb_mobile/core/exchange/domain/usecases/get_order_usercase.dart';
  import 'package:bb_mobile/core/exchange/domain/usecases/list_cad_billers_usecase.dart';
  import 'package:bb_mobile/core/exchange/domain/usecases/list_recipients_usecase.dart';
  import 'package:bb_mobile/core/fees/domain/get_network_fees_usecase.dart';
  
  import 'package:bb_mobile/core/wallet/domain/usecases/get_address_at_index_usecase.dart';
  import 'package:bb_mobile/core/wallet/domain/usecases/get_wallet_utxos_usecase.dart';
  import 'package:bb_mobile/features/pay/domain/create_pay_order_usecase.dart';
  import 'package:bb_mobile/features/pay/domain/refresh_pay_order_usecase.dart';
  import 'package:bb_mobile/features/pay/presentation/pay_bloc.dart';
  import 'package:bb_mobile/features/send/domain/usecases/calculate_bitcoin_absolute_fees_usecase.dart';
  import 'package:bb_mobile/features/send/domain/usecases/calculate_liquid_absolute_fees_usecase.dart';
  
  import 'package:bb_mobile/features/send/domain/usecases/prepare_bitcoin_send_usecase.dart';
  import 'package:bb_mobile/features/send/domain/usecases/prepare_liquid_send_usecase.dart';
  import 'package:bb_mobile/features/send/domain/usecases/sign_bitcoin_tx_usecase.dart';
  import 'package:bb_mobile/features/send/domain/usecases/sign_liquid_tx_usecase.dart';
  import 'package:bb_mobile/locator.dart';
  
  class PayLocator {
    static void setup() {
      registerUsecases();
      registerBlocs();
    }
  
    static void registerUsecases() {
      locator.registerFactory<PlacePayOrderUsecase>(
        () => PlacePayOrderUsecase(
          mainnetExchangeOrderRepository: locator<ExchangeOrderRepository>(
            instanceName: 'mainnetExchangeOrderRepository',
          ),
          testnetExchangeOrderRepository: locator<ExchangeOrderRepository>(
            instanceName: 'testnetExchangeOrderRepository',
          ),
          settingsRepository: locator(),
        ),
      );
  
      locator.registerFactory<RefreshPayOrderUsecase>(
        () => RefreshPayOrderUsecase(
          mainnetExchangeOrderRepository: locator<ExchangeOrderRepository>(
            instanceName: 'mainnetExchangeOrderRepository',
          ),
          testnetExchangeOrderRepository: locator<ExchangeOrderRepository>(
            instanceName: 'testnetExchangeOrderRepository',
          ),
          settingsRepository: locator(),
        ),
      );
    }
  
    static void registerBlocs() {
      locator.registerFactory<PayBloc>(
        () => PayBloc(
          getExchangeUserSummaryUsecase: locator<GetExchangeUserSummaryUsecase>(),
          listRecipientsUsecase: locator<ListRecipientsUsecase>(),
          createFiatRecipientUsecase: locator<CreateFiatRecipientUsecase>(),
          listCadBillersUsecase: locator<ListCadBillersUsecase>(),
          placePayOrderUsecase: locator<PlacePayOrderUsecase>(),
          refreshPayOrderUsecase: locator<RefreshPayOrderUsecase>(),
          prepareBitcoinSendUsecase: locator<PrepareBitcoinSendUsecase>(),
          prepareLiquidSendUsecase: locator<PrepareLiquidSendUsecase>(),
          signBitcoinTxUsecase: locator<SignBitcoinTxUsecase>(),
          signLiquidTxUsecase: locator<SignLiquidTxUsecase>(),
          broadcastBitcoinTransactionUsecase:
              locator<BroadcastBitcoinTransactionUsecase>(),
          broadcastLiquidTransactionUsecase:
              locator<BroadcastLiquidTransactionUsecase>(),
          getNetworkFeesUsecase: locator<GetNetworkFeesUsecase>(),
          calculateLiquidAbsoluteFeesUsecase:
              locator<CalculateLiquidAbsoluteFeesUsecase>(),
          calculateBitcoinAbsoluteFeesUsecase:
              locator<CalculateBitcoinAbsoluteFeesUsecase>(),
          convertSatsToCurrencyAmountUsecase:
              locator<ConvertSatsToCurrencyAmountUsecase>(),
          getAddressAtIndexUsecase: locator<GetAddressAtIndexUsecase>(),
          getWalletUtxosUsecase: locator<GetWalletUtxosUsecase>(),
          getOrderUsecase: locator<GetOrderUsecase>(),
        ),
      );
    }
  }
  