import 'app_usage_api.dart';
import 'list_extension.dart';
import 'seos_mobile_keys_plugin_platform_interface.dart';

class PigeonAppUsage extends SeosMobileKeysPluginPlatform {
  final AppUsageAPI _appUsageAPI = AppUsageAPI();

  @override
  Future<void> startUp(Map<String?, Object?> options) =>
      _appUsageAPI.startUp(options);

  @override
  Future<bool> deviceHasBluetoothTurnedOn() =>
      _appUsageAPI.deviceHasBluetoothTurnedOn();

  @override
  Future<bool> deviceSupportsBluetoothLowEnergy() =>
      _appUsageAPI.deviceSupportsBluetoothLowEnergy();

  @override
  Future<bool> isEndpointSetup() =>
      _appUsageAPI.isEndpointSetup();

  @override
  Future<void> setupEndpoint(String invitationCode) =>
      _appUsageAPI.setupEndpoint(invitationCode);

  @override
  Future<void> updateEndpoint() =>
      _appUsageAPI.updateEndpoint();

  @override
  Future<void> terminateEndpoint() =>
      _appUsageAPI.terminateEndpoint();

  @override
  Future<List<MobileKeysKey>> listMobileKeys() async =>
      (await _appUsageAPI.listMobileKeys())
          .removeNulls();

  @override
  Future<bool> activateMobileKey(MobileKeysKey key) =>
      _appUsageAPI.activateMobileKey(key);

  @override
  Future<bool> deactivateMobileKey(MobileKeysKey key) =>
      _appUsageAPI.deactivateMobileKey(key);

  @override
  Future<String> generateOTPForKey(MobileKeysKey key) =>
      _appUsageAPI.generateOTPForKey(key);

  @override
  Future<int> otpCounterForKey(MobileKeysKey key) =>
      _appUsageAPI.otpCounterForKey(key);

  @override
  Future<MobileKeysEndpointInfo> endpointInfo() =>
      _appUsageAPI.endpointInfo();

  @override
  Future<List<MobileKeysInfoType>> healthCheck() async =>
      (await _appUsageAPI.healthCheck())
          .removeNulls();

  @override
  Future<String> apiVersion() =>
      _appUsageAPI.apiVersion();

  @override
  Future<bool> isScanning() =>
      _appUsageAPI.isScanning();

  @override
  Future<void> startReaderScan(
      MobileKeysScanMode mode,
      List<MobileKeysOpeningType?> supportedOpeningTypes,
      List<int?> lockServiceCodes) =>
      _appUsageAPI.startReaderScan(mode, supportedOpeningTypes, lockServiceCodes);

  @override
  Future<void> setSupportedOpeningTypes(List<MobileKeysOpeningType> supportedOpeningTypes) =>
      _appUsageAPI.setSupportedOpeningTypes(supportedOpeningTypes);

  @override
  Future<void> setTimeoutConfiguration(MobileKeysTimeoutConfiguration timeoutConfiguration) =>
      _appUsageAPI.setTimeoutConfiguration(timeoutConfiguration);

  @override
  Future<List<MobileKeysReader>> listReaders() async =>
      (await _appUsageAPI.listReaders())
          .removeNulls();

  @override
  Future<MobileKeysReader?> closestReaderWithinRangeOfOpeningType(MobileKeysOpeningType type) =>
      _appUsageAPI.closestReaderWithinRangeOfOpeningType(type);

  @override
  Future<void> connectToReader(MobileKeysReader reader, MobileKeysOpeningType openingType) =>
      _appUsageAPI.connect(reader, openingType);

  @override
  Future<void> forceConnectToReader(MobileKeysReader reader, MobileKeysOpeningType openingType) =>
      _appUsageAPI.forceConnect(reader, openingType);

  @override
  Future<void> cancelReaderConnection(MobileKeysReader reader) =>
      _appUsageAPI.cancelReaderConnection(reader);

  @override
  Future<void> stopReaderScan() =>
      _appUsageAPI.stopReaderScan();

  @override
  Future<MobileKeysLastAuthenticationInfo> lastAuthenticationInfo() =>
      _appUsageAPI.lastAuthenticationInfo();

  @override
  Future<void> openClosestReader() =>
      _appUsageAPI.openClosestReader();

  @override
  Future<void> removeRootOpeningTrigger() =>
      _appUsageAPI.removeRootOpeningTrigger();

  @override
  Future<void> setRootOpeningTrigger() =>
      _appUsageAPI.setRootOpeningTrigger();
}