import 'package:flutter/material.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:lasertag_app/l10n/app_localizations.dart';
import 'constants.dart';

class LeaderSelectionScreen extends StatefulWidget {
  const LeaderSelectionScreen({super.key});

  @override
  State<LeaderSelectionScreen> createState() => _LeaderSelectionScreenState();
}

class _LeaderSelectionScreenState extends State<LeaderSelectionScreen> {
  // Map, um Geräte und ihren erkannten Typ zu speichern
  Map<BluetoothDevice, int> discoveredDevices = {};

  @override
  void initState() {
    super.initState();
    _startDiscovery();
  }

  void _startDiscovery() async {
    FlutterBluePlus.scanResults.listen((results) {
      for (ScanResult r in results) {
        // 1. Prüfen, ob Manufacturer Data für unsere Test-ID (0xFFFF / 65535) da ist
        final mfgData = r.advertisementData.manufacturerData[65535];

        if (mfgData != null && mfgData.isNotEmpty) {
          int detectedType = mfgData[0]; // Das Typ-Byte vom nRF52

          // 2. Nur hinzufügen, wenn es wirklich ein Leader (0x01) ist
          if (detectedType == LasertagUUIDs.typeLeader) {
            if (!discoveredDevices.containsKey(r.device)) {
              setState(() {
                discoveredDevices[r.device] = detectedType;
              });
            }
          }
        }
      }
    });
    // 2. Warten, bis der Bluetooth-Adapter wirklich "on" ist
    await FlutterBluePlus.adapterState
        .where((s) => s == BluetoothAdapterState.on)
        .first;

    // 3. Den Scan tatsächlich starten
    try {
      // Filtert nach der Service-UUID ...1000 aus ble_mgmt.c
      await FlutterBluePlus.startScan(
        withServices: [Guid(LasertagUUIDs.provService)],
        timeout: const Duration(seconds: 15),
      );
    } catch (e) {
      debugPrint("Scan-Fehler: $e");
    }
  } // <--- Hier endet _startDiscovery korrekt

  // Hilfsfunktion zur Übersetzung des Typs
  String _getLocalizedTypeName(BuildContext context, int type) {
    final l10n = AppLocalizations.of(context)!;
    switch (type) {
      case LasertagUUIDs.typeLeader:
        return l10n.typeLeader;
      case LasertagUUIDs.typeWeapon:
        return l10n.typeWeapon;
      case LasertagUUIDs.typeVest:
        return l10n.typeVest;
      case LasertagUUIDs.typeBeacon:
        return l10n.typeBeacon;
      default:
        return "Unknown";
    }
  }

  @override
  Widget build(BuildContext context) {
    final l10n = AppLocalizations.of(context)!;

    return Scaffold(
      appBar: AppBar(title: Text(l10n.selectLeader)),
      body: Column(
        children: [
          Padding(
            padding: const EdgeInsets.all(16.0),
            child: Text(l10n.searching),
          ),
          Expanded(
            child: ListView(
              children: discoveredDevices.entries.map((entry) {
                final device = entry.key;
                final type = entry.value;
                return ListTile(
                  leading: Icon(
                    Icons.hub,
                    // Holt sich die Akzentfarbe direkt vom Betriebssystem via Theme-Context
                    color: Theme.of(context).colorScheme.primary,
                    size: 32,
                  ),
                  title: Text(
                    device.platformName.isEmpty
                        ? "Lasertag Device"
                        : device.platformName,
                    style: const TextStyle(fontWeight: FontWeight.bold),
                  ),
                  subtitle: Text(
                    "${_getLocalizedTypeName(context, type)} (${device.remoteId})",
                    // Nutzt eine dezentere Farbe für den Untertitel
                    style: TextStyle(
                      color: Theme.of(context).colorScheme.onSurfaceVariant,
                    ),
                  ),
                  onTap: () => _onLeaderSelected(device),
                );
              }).toList(),
            ),
          ),
        ],
      ),
    );
  }

  void _onLeaderSelected(BluetoothDevice device) {
    debugPrint("Leader ausgewählt: ${device.platformName}");
    // Hier öffnen wir als nächstes den Config-Dialog
  }
}
