import 'dart:async';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'rutas.dart';
import 'admin.dart';
import '../services/notification_service.dart';

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

  @override
  State<ConfiguracionView> createState() => _ConfiguracionViewState();
}

class _ConfiguracionViewState extends State<ConfiguracionView> {
  String selectedOption = '7 días';
  bool _isLoading = true;

  // Para el botón secreto de Admin
  int _secretTapCount = 0;
  Timer? _resetTimer;

  // Para el botón secreto de notificación de prueba (3 taps en el texto de ayuda)
  int _testNotificationTapCount = 0;
  Timer? _testResetTimer;

  final List<String> opciones = [
    'Cada día',
    'Cada 3 días',
    'Cada semana',
    'Cada quincena',
  ];

  final Map<String, String> opcionesMap = {
    'Cada día': '1 día',
    'Cada 3 días': '3 días',
    'Cada semana': '7 días',
    'Cada quincena': '15 días',
  };

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

  @override
  void dispose() {
    _resetTimer?.cancel();
    _testResetTimer?.cancel();
    super.dispose();
  }

  Future<void> _cargarPreferencia() async {
    try {
      final prefs = await SharedPreferences.getInstance();
      final String? savedOption = prefs.getString('notificacion_frecuencia');

      setState(() {
        if (savedOption != null && opciones.contains(savedOption)) {
          selectedOption = savedOption;
        }
        _isLoading = false;
      });
    } catch (e) {
      setState(() {
        _isLoading = false;
      });
    }
  }

  Future<void> _guardarPreferencia(String value) async {
    try {
      final prefs = await SharedPreferences.getInstance();
      await prefs.setString('notificacion_frecuencia', value);

      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text('Notificaciones: $value'),
            backgroundColor: colorAzul,
            duration: const Duration(seconds: 1),
          ),
        );
      }
    } catch (e) {
      print('Error al guardar preferencia: $e');
    }
  }

  void _mostrarSelector() {
    showModalBottomSheet(
      context: context,
      shape: const RoundedRectangleBorder(
        borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
      ),
      builder: (BuildContext context) {
        return Container(
          padding: const EdgeInsets.all(20),
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              const Text(
                'Frecuencia de notificaciones',
                style: TextStyle(
                  fontSize: 20,
                  fontWeight: FontWeight.bold,
                  color: colorAzul,
                ),
              ),
              const SizedBox(height: 20),
              ...opciones.map((opcion) {
                return ListTile(
                  leading: Icon(
                    selectedOption == opcion ? Icons.radio_button_checked : Icons.radio_button_unchecked,
                    color: colorAzul,
                  ),
                  title: Text(
                    opcion,
                    style: TextStyle(
                      fontSize: 18,
                      fontWeight: selectedOption == opcion ? FontWeight.bold : FontWeight.normal,
                      color: selectedOption == opcion ? colorAzul : Colors.black87,
                    ),
                  ),
                  trailing: Text(
                    opcionesMap[opcion]!,
                    style: const TextStyle(
                      fontSize: 14,
                      color: Colors.grey,
                    ),
                  ),
                  onTap: () {
                    setState(() {
                      selectedOption = opcion;
                    });
                    _guardarPreferencia(opcion);
                    Navigator.pop(context);
                  },
                );
              }),
              const SizedBox(height: 10),
            ],
          ),
        );
      },
    );
  }

  // 🔥 BOTÓN SECRETO 1: Tocar el ícono 5 veces para Admin
  void _onSecretTap() {
    _secretTapCount++;

    _resetTimer?.cancel();
    _resetTimer = Timer(const Duration(milliseconds: 1500), () {
      _secretTapCount = 0;
      print('🔐 Contador Admin reiniciado');
    });

    print('🔐 Taps Admin: $_secretTapCount/5');

    if (_secretTapCount >= 5) {
      _resetTimer?.cancel();
      _secretTapCount = 0;

      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => const AdminView()),
      );

      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(
          content: Text('🔐 Modo administrador activado'),
          backgroundColor: Colors.green,
          duration: Duration(seconds: 2),
        ),
      );
    }
  }

  // 🔥 BOTÓN SECRETO 2: Tocar el texto de ayuda 3 veces para notificación de prueba
  void _onTestNotificationTap() {
    _testNotificationTapCount++;

    _testResetTimer?.cancel();
    _testResetTimer = Timer(const Duration(milliseconds: 1500), () {
      _testNotificationTapCount = 0;
      print('🔐 Contador Notificacion reiniciado');
    });

    print('🔐 Taps Notificacion: $_testNotificationTapCount/3');

    if (_testNotificationTapCount >= 3) {
      _testResetTimer?.cancel();
      _testNotificationTapCount = 0;

      // Enviar notificación de prueba
      NotificationService.showNotification(
        title: '🔔 Notificación de prueba',
        body: 'Esta es una notificación de prueba. ¡Tu app funciona correctamente!',
      );

      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(
          content: Text('🔔 Notificación de prueba enviada'),
          backgroundColor: Colors.blue,
          duration: Duration(seconds: 2),
        ),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: SafeArea(
        child: Column(
          children: [
            Container(
              width: double.infinity,
              padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 16),
              decoration: const BoxDecoration(
                color: colorAzul,
                borderRadius: BorderRadius.only(
                  bottomLeft: Radius.circular(20),
                  bottomRight: Radius.circular(20),
                ),
              ),
              child: const Text(
                'Configuración',
                style: TextStyle(
                  color: Colors.white,
                  fontSize: 28,
                  fontWeight: FontWeight.bold,
                ),
                textAlign: TextAlign.center,
              ),
            ),
            Expanded(
              child: _isLoading
                  ? const Center(
                child: CircularProgressIndicator(
                  color: colorAzul,
                ),
              )
                  : Padding(
                padding: const EdgeInsets.all(20.0),
                child: Column(
                  children: [
                    // Selector de notificaciones
                    GestureDetector(
                      onTap: _mostrarSelector,
                      child: Container(
                        padding: const EdgeInsets.all(15),
                        decoration: BoxDecoration(
                          border: Border.all(color: Colors.black, width: 4),
                          borderRadius: BorderRadius.circular(25),
                        ),
                        child: Row(
                          children: [
                            // 🔥 BOTÓN SECRETO ADMIN (5 taps)
                            GestureDetector(
                              onTap: _onSecretTap,
                              child: const Icon(Icons.notifications_active_outlined, size: 60),
                            ),
                            const SizedBox(width: 10),
                            Text(
                              selectedOption,
                              style: const TextStyle(
                                fontSize: 22,
                                fontWeight: FontWeight.bold,
                              ),
                            ),
                            const Spacer(),
                            const Icon(Icons.keyboard_arrow_down, size: 50),
                          ],
                        ),
                      ),
                    ),
                    const SizedBox(height: 20),
                    Container(
                      padding: const EdgeInsets.all(15),
                      decoration: BoxDecoration(
                        color: colorAzul.withOpacity(0.1),
                        borderRadius: BorderRadius.circular(15),
                      ),
                      child: Row(
                        children: [
                          Icon(Icons.info_outline, color: colorAzul, size: 30),
                          const SizedBox(width: 10),
                          Expanded(
                            child: Text(
                              'Recibirás notificaciones cada ${opcionesMap[selectedOption]}',
                              style: TextStyle(
                                fontSize: 16,
                                color: colorAzul,
                              ),
                            ),
                          ),
                        ],
                      ),
                    ),
                    const SizedBox(height: 20),
                    // 🔥 BOTÓN SECRETO NOTIFICACIÓN DE PRUEBA (3 taps en este texto)
                    GestureDetector(
                      onTap: _onTestNotificationTap,
                      child: Container(
                        padding: const EdgeInsets.all(8),
                        decoration: BoxDecoration(
                          color: Colors.grey[200],
                          borderRadius: BorderRadius.circular(10),
                        ),
                        child: const Text(
                          '👆 Toca el ícono de la campana 5 veces para Admin',
                          style: TextStyle(fontSize: 11, color: Colors.grey),
                        ),
                      ),
                    ),
                    const SizedBox(height: 10),
                    // Indicador del segundo botón secreto
                    GestureDetector(
                      onTap: _onTestNotificationTap,
                      child: Container(
                        padding: const EdgeInsets.all(6),
                        decoration: BoxDecoration(
                          color: Colors.blue.withOpacity(0.1),
                          borderRadius: BorderRadius.circular(8),
                        ),
                        child: const Text(
                          '🔔 Toca este texto 3 veces para notificación de prueba',
                          style: TextStyle(fontSize: 10, color: Colors.blue),
                          textAlign: TextAlign.center,
                        ),
                      ),
                    ),
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}