using Controladora;
using Entidades;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace Vista
{
    public partial class FrmProducto : Form
    {
        public FrmProducto()
        {
            InitializeComponent();
            CargarCategorias();
        }

        private void CargarCategorias()
        {
            // Obtener la lista de categorías desde la controladora
            var categorias = ControladoraCategorias.Instance.Listar();

            // Configurar el ComboBox para categorías
            comboBox1.DisplayMember = "Descripcion"; // Mostrar la propiedad Descripcion
            comboBox1.ValueMember = "Id"; // Usar la propiedad Id como valor

            // Asignar la lista de categorías al ComboBox
            comboBox1.DataSource = categorias;
        }

        private bool ValidarDatos()
        {
            string devolucion = "";

            // Validar Nombre
            if (string.IsNullOrEmpty(textBox1.Text))
            {
                devolucion += "El nombre del producto no puede estar vacío.\n";
            }
            else if (textBox1.Text.Length > 100) // Limite de caracteres
            {
                devolucion += "El nombre del producto no puede superar los 100 caracteres.\n";
            }

            // Validar Precio
            if (numericUpDown2.Value <= 0)
            {
                devolucion += "El precio debe ser mayor a cero.\n";
            }

            // Validar ID (Si es necesario)
            if (ControladoraProductos.Instance.Listar().Any(p => p.Id == (int)numericUpDown1.Value))
            {
                devolucion += "Ya existe un producto con el mismo ID.\n";
            }

            // Validar Categoría Seleccionada
            if (comboBox1.SelectedItem == null)
            {
                devolucion += "Debe seleccionar una categoría.\n";
            }

            if (devolucion == "")
            {
                return true;
            }
            else
            {
                MessageBox.Show(devolucion, "Errores de Validación", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (ValidarDatos())
            {
                // Crear nuevo producto
                var nuevoProducto = new Producto
                {
                    Id = (int)numericUpDown1.Value,
                    Nombre = textBox1.Text,
                    Precio = (double)numericUpDown2.Value,
                    Habilitado = checkBox1.Checked,
                    Categoria = (Categoria)comboBox1.SelectedItem, // Asignar categoría seleccionada
                };

                // Agregar el producto usando la controladora
                string mensaje = ControladoraProductos.Instance.Añadir(nuevoProducto);

                MessageBox.Show(mensaje, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                Close();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Puedes usar este método para manejar cambios en el ComboBox si es necesario
            // No es necesario mantener una variable separada para la categoría seleccionada
        }
    }
}
