import '../../../../core/network/mysql_service.dart'; // 📍 Ajusta las carpetas '../' según tu proyecto import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:flutter_application_1/features/auth/data/models/mock_waste_data.dart'; class RegisterScreen extends StatefulWidget { const RegisterScreen({super.key}); @override State createState() => _RegisterScreenState(); } class _RegisterScreenState extends State { final _formKey = GlobalKey(); late String _selectedColonia; final _nameController = TextEditingController(); final _emailController = TextEditingController(); final _passwordController = TextEditingController(); @override void initState() { super.initState(); if (MockWasteData.schedules.isNotEmpty) { _selectedColonia = MockWasteData.schedules.first.colonia; } else { _selectedColonia = ''; } } @override void dispose() { _nameController.dispose(); _emailController.dispose(); _passwordController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Crear Cuenta Ciudadana')), body: SingleChildScrollView( padding: const EdgeInsets.all(24.0), child: Form( key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ const Icon(Icons.assignment_ind_outlined, size: 80, color: Colors.green), const SizedBox(height: 16), Text( 'Regístrate para recibir avisos de recolección en tu zona', textAlign: TextAlign.center, style: Theme.of(context).textTheme.bodyLarge, ), const SizedBox(height: 24), TextFormField( controller: _nameController, decoration: const InputDecoration( labelText: 'Nombre Completo', border: OutlineInputBorder()), validator: (v) => v == null || v.isEmpty ? 'Ingresa tu nombre' : null, ), const SizedBox(height: 16), TextFormField( controller: _emailController, decoration: const InputDecoration( labelText: 'Correo o Teléfono', border: OutlineInputBorder()), validator: (v) => v == null || v.isEmpty ? 'Ingresa tus datos' : null, ), const SizedBox(height: 16), TextFormField( controller: _passwordController, obscureText: true, decoration: const InputDecoration( labelText: 'Contraseña', border: OutlineInputBorder()), validator: (v) => v == null || v.length < 6 ? 'Mínimo 6 caracteres' : null, ), const SizedBox(height: 16), DropdownButtonFormField( value: _selectedColonia, decoration: const InputDecoration( labelText: 'Selecciona tu Colonia / Domicilio', border: OutlineInputBorder()), items: MockWasteData.schedules.map((zone) { return DropdownMenuItem( value: zone.colonia, child: Text(zone.colonia)); }).toList(), onChanged: (val) => setState(() => _selectedColonia = val!), ), const SizedBox(height: 24), Card( color: Colors.amber.shade50, child: Padding( padding: const EdgeInsets.all(12.0), child: Text( '🔒 Privacidad Garantizada:\nAl registrar tu domicilio, tu cuenta operará bajo el principio de "Visión de Túnel". Solo verás alertas de tu sector. Está prohibido el rastreo de flotillas.', style: TextStyle( color: Colors.amber.shade900, fontSize: 13, fontWeight: FontWeight.bold), ), ), ), const SizedBox(height: 24), ElevatedButton( style: ElevatedButton.styleFrom( padding: const EdgeInsets.symmetric(vertical: 16), backgroundColor: Colors.green), onPressed: () async { if (_formKey.currentState!.validate()) { try { print( '=== DEPURACIÓN: Iniciando proceso de registro ==='); ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text( 'Conectando con la base de datos local...')), ); final conn = await MySqlService().getConnection(); print( '=== DEPURACIÓN: ¡Conexión obtenida! Estado connected: ${conn.connected}'); print('=== DEPURACIÓN: Intentando ejecutar INSERT ==='); final result = await conn.execute( "INSERT INTO usuarios (email, telefono, contrasena_hash, rol, is_verified) VALUES (:email, :telefono, :contrasena_hash, :rol, :is_verified)", { "email": _emailController.text.trim(), "telefono": "4611234567", "contrasena_hash": _passwordController.text, "rol": "Ciudadano", // 📍 CORRECCIÓN: Cambia "ciudadano" por "Ciudadano" (con mayúscula) "is_verified": 1, }, ); print( '=== DEPURACIÓN: INSERT completado. Filas afectadas: ${result.affectedRows}'); if (!mounted) return; if (result.affectedRows > BigInt.zero) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text( '¡Usuario guardado con éxito en MySQL Celaya!')), ); context.go('/home?colonia=$_selectedColonia'); } else { print( '=== DEPURACIÓN: El query se ejecutó pero devolvió 0 filas afectadas ==='); } } catch (e, stacktrace) { print( '=== DEPURACIÓN: ¡CAPTURADO UN ERROR EN EL CATCH! ==='); print('Detalle del error: $e'); print( 'Ubicación del fallo (Stacktrace): \n$stacktrace'); if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Error de conexión a MySQL: $e'), backgroundColor: Colors.red, duration: const Duration(seconds: 5), ), ); } } }, child: const Text('Registrarse', style: TextStyle(color: Colors.white, fontSize: 16)), ), ], ), ), )); } }