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

import '../../models/models.dart';
import '../../viewmodels/viewmodels.dart';

class CategoriaProductoForm extends StatefulWidget {
  final CategoriaProducto categoriaProducto;

  const CategoriaProductoForm({Key? key, required this.categoriaProducto})
      : super(key: key);

  @override
  State<CategoriaProductoForm> createState() => Formulario();
}

class Formulario extends State<CategoriaProductoForm> {
  final _nombre = TextEditingController();
  final _descripcion = TextEditingController();
  final _maximo = TextEditingController();
  final _minimo = TextEditingController();
  late int esToping;

  @override
  void initState() {
    super.initState();
    _nombre.text = widget.categoriaProducto.nombre ?? "";
    _descripcion.text = widget.categoriaProducto.descripcion ?? "";
    _maximo.text = widget.categoriaProducto.maximo?.toString() ?? "";
    _minimo.text = widget.categoriaProducto.minimo?.toString() ?? "";
    esToping = widget.categoriaProducto.esToping ?? 0;
    WidgetsBinding.instance.addPostFrameCallback((_) {
      _loadData();
    });
  }

  void _loadData() async {
    await Provider.of<CategoriaProductoViewModel>(context, listen: false)
        .fetchLocalAll();
  }

  @override
  Widget build(BuildContext context) {
    final CategoriaProductoViewModel categoriaProductoVM =
        Provider.of<CategoriaProductoViewModel>(context);

    return Scaffold(
      appBar: AppBar(
        title: Text(
          'Nueva Categoría Producto',
          style: TextStyle(color: AppTheme.secondary),
        ),
        iconTheme: IconThemeData(color: AppTheme.secondary),
      ),
      body: SingleChildScrollView(
        padding: EdgeInsets.all(8),
        child: Column(
          children: [
            tarjeta(
              Padding(
                padding: const EdgeInsets.all(8),
                child: Column(
                  children: [
                    AppTextField(
                      maxLength: 100,
                      etiqueta: 'Nombre',
                      controller: _nombre,
                      hintText: 'Nombre de la categoría',
                    ),
                    AppTextField(
                      maxLength: 100,
                      etiqueta: 'Descripción',
                      controller: _descripcion,
                      hintText: 'Descripción de la categoría',
                    ),
                    Align(
                      alignment: Alignment.centerLeft,
                      child: Column(children: [
                        Text(
                          'Es Toping',
                          style: TextStyle(
                            fontSize: 18,
                            fontWeight: FontWeight.bold,
                          ),
                        ),
                        Switch(
                          value: esToping == 1,
                          onChanged: (value) {
                            setState(() {
                              esToping = value ? 1 : 0;
                            });
                          },
                          activeColor: AppTheme.primary,
                        ),
                      ]),
                    ),
                    SizedBox(height: 10),
                    if (esToping == 1)
                      Row(
                        children: [
                          Expanded(
                            child: AppTextField(
                              maxLength: 2,
                              etiqueta: 'Máximo',
                              controller: _maximo,
                              hintText:
                                  'Máximo permitido en un pedido (opcional)',
                              keyboardType: TextInputType.number,
                            ),
                          ),
                          Expanded(
                            child: AppTextField(
                              maxLength: 2,
                              etiqueta: 'Mínimo',
                              controller: _minimo,
                              hintText: 'Mínimo a seleccionar en un pedido',
                              keyboardType: TextInputType.number,
                            ),
                          )
                        ],
                      ),
                  ],
                ),
              ),
            ),
            SizedBox(height: 15),
            boton("Guardar", () async {
              Provider.of<CategoriaProductoViewModel>(context, listen: false)
                  .setIsLoading(true);

              int? maximoValue =
                  _maximo.text.isNotEmpty ? int.tryParse(_maximo.text) : null;

              int? minimoValue =
                  _minimo.text.isNotEmpty ? int.tryParse(_minimo.text) : null;

              await categoriaProductoVM.updateCategoriaProducto(
                CategoriaProducto(
                  id: widget.categoriaProducto.id,
                  nombre: _nombre.text,
                  descripcion: _descripcion.text,
                  esToping: esToping,
                  maximo: maximoValue,
                  minimo: minimoValue,
                ),
              );

              Provider.of<CategoriaProductoViewModel>(context, listen: false)
                  .setIsLoading(false);
              if (context.mounted) {
                Navigator.pop(context);
              }
            })
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    _nombre.dispose();
    _descripcion.dispose();
    _maximo.dispose();
    super.dispose();
  }
}
