import 'dart:core';

import 'package:plugin_platform_interface/plugin_platform_interface.dart';
import 'package:seos_mobile_keys_plugin/app_usage_pigeon.dart';

import 'app_usage_api.dart';

abstract class SeosMobileKeysPluginPlatform extends PlatformInterface {
  /// Constructs a SeosMobileKeysPluginPlatform.
  SeosMobileKeysPluginPlatform() : super(token: _token);

  static final Object _token = Object();

  static SeosMobileKeysPluginPlatform _instance = PigeonAppUsage();

  /// The default instance of [SeosMobileKeysPluginPlatform] to use.
  ///
  /// Defaults to [MethodChannelSeosMobileKeysPlugin].
  static SeosMobileKeysPluginPlatform get instance => _instance;

  /// Platform-specific implementations should set this with their own
  /// platform-specific class that extends [SeosMobileKeysPluginPlatform] when
  /// they register themselves.
  static set instance(SeosMobileKeysPluginPlatform instance) {
    PlatformInterface.verifyToken(instance, _token);
    _instance = instance;
  }

  Future<void> startUp(Map<String?, Object?> options) =>
      throw UnimplementedError('startUp() has not been implemented.');

  Future<bool> deviceHasBluetoothTurnedOn() =>
      throw UnimplementedError('deviceHasBluetoothTurnedOn() has not been implemented.');

  Future<bool> deviceSupportsBluetoothLowEnergy() =>
      throw UnimplementedError('deviceSupportsBluetoothLowEnergy() has not been implemented.');

  Future<bool> isEndpointSetup() =>
      throw UnimplementedError('isEndpointSetup() has not been implemented.');

  Future<void> setupEndpoint(String invitationCode) =>
      throw UnimplementedError('setupEndpoint() has not been implemented.');

  Future<void> updateEndpoint() =>
      throw UnimplementedError('updateEndpoint() has not been implemented.');

  Future<void> terminateEndpoint() =>
      throw UnimplementedError('terminateEndpoint() has not been implemented.');

  Future<List<MobileKeysKey>> listMobileKeys() =>
      throw UnimplementedError('listMobileKeys() has not been implemented.');

  Future<bool> activateMobileKey(MobileKeysKey key) =>
      throw UnimplementedError('activateMobileKey() has not been implemented.');

  Future<bool> deactivateMobileKey(MobileKeysKey key) =>
      throw UnimplementedError('deactivateMobileKey() has not been implemented.');

  Future<String> generateOTPForKey(MobileKeysKey key) =>
      throw UnimplementedError('generateOTPForKey() has not been implemented.');

  Future<int> otpCounterForKey(MobileKeysKey key) =>
      throw UnimplementedError('otpCounterForKey() has not been implemented.');

  Future<MobileKeysEndpointInfo> endpointInfo() => throw UnimplementedError('endpointInfo() has not been implemented.');

  Future<List<MobileKeysInfoType>> healthCheck() =>
      throw UnimplementedError('healthCheck() has not been implemented.');

  Future<String> apiVersion() =>
      throw UnimplementedError('apiVersion() has not been implemented.');

  Future<bool> isScanning() =>
      throw UnimplementedError('isScanning() has not been implemented.');

  Future<void> startReaderScan(
      MobileKeysScanMode mode,
      List<MobileKeysOpeningType?> supportedOpeningTypes,
      List<int?> lockServiceCodes) =>
      throw UnimplementedError('startReaderScan() has not been implemented.');

  Future<void> setSupportedOpeningTypes(List<MobileKeysOpeningType> supportedOpeningTypes) =>
      throw UnimplementedError('setSupportedOpeningTypes() has not been implemented.');

  Future<void> setTimeoutConfiguration(MobileKeysTimeoutConfiguration timeoutConfiguration) =>
      throw UnimplementedError('setTimeoutConfiguration() has not been implemented.');

  Future<void> stopReaderScan() =>
      throw UnimplementedError('stopReaderScan() has not been implemented.');

  Future<MobileKeysLastAuthenticationInfo> lastAuthenticationInfo() =>
      throw UnimplementedError('lastAuthenticationInfo() has not been implemented.');

  Future<List<MobileKeysReader>> listReaders() =>
      throw UnimplementedError('listReaders() has not been implemented.');

  Future<MobileKeysReader?> closestReaderWithinRangeOfOpeningType(MobileKeysOpeningType type) =>
      throw UnimplementedError('closestReaderWithinRangeOfOpeningType() has not been implemented.');

  Future<void> connectToReader(MobileKeysReader reader, MobileKeysOpeningType openingType) =>
      throw UnimplementedError('connectToReader() has not been implemented.');

  Future<void> forceConnectToReader(MobileKeysReader reader, MobileKeysOpeningType openingType) =>
      throw UnimplementedError('forceConnectToReader() has not been implemented.');

  Future<void> cancelReaderConnection(MobileKeysReader reader) =>
      throw UnimplementedError('cancelReaderConnection() has not been implemented.');

  Future<void> openClosestReader() =>
      throw UnimplementedError('openClosestReader() has not been implemented.');

  Future<void> removeRootOpeningTrigger() =>
      throw UnimplementedError('removeRootOpeningTrigger() has not been implemented.');

  Future<void> setRootOpeningTrigger() =>
      throw UnimplementedError('setRootOpeningTrigger() has not been implemented.');

  Future<bool> isAnalyticsEnabled() =>
      throw UnimplementedError('isAnalyticsEnabled() has not been implemented.');

  Future<void> analytics(bool enable) =>
      throw UnimplementedError('analytics() has not been implemented.');
}