import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../viewmodels/viewmodels.dart';
import '../../models/models.dart';
import '../../widgets/widgets.dart';

class SucursalesPage extends StatefulWidget {
  @override
  _SucursalesPageState createState() => _SucursalesPageState();
}

class _SucursalesPageState extends State<SucursalesPage> {
  Sucursal? _selectedSucursal;

  @override
  void initState() {
    super.initState();
    // Cargar las sucursales desde la base de datos local cuando se inicializa la pantalla
    Provider.of<SucursalViewModel>(context, listen: false)
        .fetchLocalSucursales()
        .then((_) {
      // Buscar la sucursal seleccionada automáticamente al cargar la pantalla
      final sucursales =
          Provider.of<SucursalViewModel>(context, listen: false).sucursales;
      setState(() {
        _selectedSucursal = sucursales.firstWhere(
          (sucursal) => sucursal.seleccionado == 1,
          orElse: () => null as Sucursal,
        );
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    final sucursalViewModel = Provider.of<SucursalViewModel>(context);
    final sucursales = sucursalViewModel.sucursales;

    return Scaffold(
      appBar: AppBar(
        title: Text('Sucursales'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            // Dropdown para seleccionar una sucursal utilizando AppDropdownModel
            AppDropdownModel<Sucursal>(
              etiqueta: 'Seleccione una sucursal',
              hint: 'Elija una sucursal',
              selectedValue: _selectedSucursal,
              onChanged: (Sucursal? newValue) {
                setState(() {
                  _selectedSucursal = newValue;
                });
              },
              items: sucursales.map((Sucursal sucursal) {
                return DropdownMenuItem<Sucursal>(
                  value: sucursal,
                  child: Text(
                    sucursal.nombre ?? '',
                    style: TextStyle(color: Colors.black),
                  ),
                );
              }).toList(),
            ),
            SizedBox(height: 20),

            // Tarjeta con la información de la sucursal seleccionada
            if (_selectedSucursal != null)
              tarjeta(
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        'Sucursal: ${_selectedSucursal!.nombre ?? ''}',
                        style: TextStyle(
                            fontSize: 16, fontWeight: FontWeight.bold),
                      ),
                      SizedBox(height: 5),
                      Text('Dirección: ${_selectedSucursal!.direccion ?? ''}'),
                      SizedBox(height: 5),
                      Text('Ciudad: ${_selectedSucursal!.ciudad ?? ''}'),
                      SizedBox(height: 5),
                      Text('Clave: ${_selectedSucursal!.clave ?? ''}'),
                      SizedBox(height: 5),
                    ],
                  ),
                ),
              ),

            SizedBox(height: 20),

            // Usar el widget de botón para guardar
            boton("Guardar", () async {
              await _guardarSucursalSeleccionada();
              if (context.mounted) {
                Navigator.pop(context);
              }
            }),
          ],
        ),
      ),
    );
  }

  Future<void> _guardarSucursalSeleccionada() async {
    if (_selectedSucursal != null) {
      // Guardar la sucursal seleccionada utilizando el ViewModel
      await Provider.of<SucursalViewModel>(context, listen: false)
          .setSelectedSucursal(_selectedSucursal!);

      setState(() {
        // Volver a establecer la sucursal seleccionada en el Dropdown
        _selectedSucursal = _selectedSucursal;
      });
    }
  }
}
