import 'dart:io';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';

/// Gestiona los permisos necesarios para Nearby Connections
class ServicioPermisos {
  /// Solicita todos los permisos necesarios para el modo multidispositivo.
  /// Retorna true si todos los permisos fueron concedidos.
  static Future<bool> solicitarPermisosNearby(BuildContext context) async {
    final permisos = <Permission>[
      Permission.locationWhenInUse,
    ];

    // Android 12+ necesita permisos BT específicos
    if (Platform.isAndroid) {
      permisos.addAll([
        Permission.bluetoothAdvertise,
        Permission.bluetoothConnect,
        Permission.bluetoothScan,
        Permission.nearbyWifiDevices,
      ]);
    }

    // Solicitar todos
    final resultados = await permisos.request();

    // Verificar cuáles fueron denegados
    final denegados = <String>[];
    for (final entry in resultados.entries) {
      if (!entry.value.isGranted) {
        denegados.add(_nombrePermiso(entry.key));
      }
    }

    if (denegados.isEmpty) return true;

    // Mostrar diálogo con los permisos que faltan
    if (context.mounted) {
      final abrirConfig = await showDialog<bool>(
        context: context,
        builder: (ctx) => AlertDialog(
          title: const Text('Permisos necesarios'),
          content: Text(
            'Para el modo multijugador necesitamos:\n\n'
            '${denegados.map((d) => '• $d').join('\n')}\n\n'
            '¿Abrir configuración de la app?',
          ),
          actions: [
            TextButton(
              onPressed: () => Navigator.pop(ctx, false),
              child: const Text('Cancelar'),
            ),
            TextButton(
              onPressed: () => Navigator.pop(ctx, true),
              child: const Text('Abrir configuración'),
            ),
          ],
        ),
      );

      if (abrirConfig == true) {
        await openAppSettings();
      }
    }

    return false;
  }

  static String _nombrePermiso(Permission p) {
    if (p == Permission.locationWhenInUse) return 'Ubicación';
    if (p == Permission.bluetoothAdvertise) return 'Bluetooth (anunciar)';
    if (p == Permission.bluetoothConnect) return 'Bluetooth (conectar)';
    if (p == Permission.bluetoothScan) return 'Bluetooth (escanear)';
    if (p == Permission.nearbyWifiDevices) return 'Wi-Fi cercano';
    return p.toString();
  }
}
