import 'dart:io';

import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:permission_handler/permission_handler.dart';

class BluetoothRepository {
  Future<bool> isSupported() {
    return FlutterBluePlus.isSupported;
  }

  Future<bool> isEnabled() async {
    final adapterState = await FlutterBluePlus.adapterState.first;
    return adapterState == BluetoothAdapterState.on;
  }

  // app does not require bluetooth permission (yet).
  // Consider remove when app is released and still not needed
  Future<bool> isPermissionGranted() async {
    // On iOS, only Permission.bluetooth is supported by permission_handler_apple.
    // bluetoothAdvertise/Scan/Connect are Android-only and always return denied on iOS.
    final permission = Platform.isIOS ? Permission.bluetooth : Permission.bluetoothAdvertise;
    final status = await permission.status;
    return status == PermissionStatus.granted;
  }

  Future<bool> request() async {
    final status = await Permission.bluetoothAdvertise.request();
    return status == PermissionStatus.granted;
  }

  Stream<bool> isEnabledStream() async* {
    await for (final state in FlutterBluePlus.adapterState) {
      if (state == BluetoothAdapterState.on) yield true;
      if (state == BluetoothAdapterState.off) yield false;
    }
  }
}