using Controladora;
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 System.Collections.ObjectModel;
using System.Linq;
using System.Windows.Forms;
using Controladora;
using Entidades;

namespace Vista
{
    public partial class FrmProductos : Form
    {
        public FrmProductos()
        {
            InitializeComponent();
            ConfigurarDataGridView();
            ActualizarGrilla();
        }

        private void ConfigurarDataGridView()
        {
            dataGridView1.AutoGenerateColumns = false;

            // Crear una columna para el ID
            var colId = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Id",
                HeaderText = "ID",
                Name = "colId"
            };

            // Crear una columna para el nombre
            var colNombre = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Nombre",
                HeaderText = "Nombre",
                Name = "colNombre"
            };

            // Crear una columna para el precio
            var colPrecio = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Precio",
                HeaderText = "Precio",
                Name = "colPrecio"
            };
            var colHabilitado = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Habilitado",
                HeaderText = "Habilitado",
                Name = "colHabilitado"
            };
            // Crear una columna para la categoría (mostrando la descripción)
            var colCategoria = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "CategoriaDescripcion",
                HeaderText = "Categoría",
                Name = "colCategoria"
            };

            // Agregar las columnas al DataGridView
            dataGridView1.Columns.Add(colId);
            dataGridView1.Columns.Add(colNombre);
            dataGridView1.Columns.Add(colPrecio);
            dataGridView1.Columns.Add(colHabilitado);
            dataGridView1.Columns.Add(colCategoria);
        }

        private void ActualizarGrilla()
        {
            dataGridView1.DataSource = null;
            dataGridView2.DataSource = null;
            var categorias = ControladoraCategorias.Instance.Listar();
            dataGridView2.DataSource = categorias;

            // Obtener la lista de productos y proyectar los datos
            var productos = ControladoraProductos.Instance.Listar()
                .Select(p => new
                {
                    p.Id,
                    p.Nombre,
                    p.Precio,
                    p.Habilitado,
                    CategoriaDescripcion = p.Categoria != null ? p.Categoria.Descripcion : string.Empty
                })
                .ToList();

            dataGridView1.DataSource = productos;
        }

        private void BtnAdd_Click(object sender, EventArgs e)
        {
            var form = new FrmProducto();
            form.ShowDialog();
            ActualizarGrilla();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var form = new AddCategoria();
            form.ShowDialog();
            ActualizarGrilla();
        }



        private void BtnEliminar_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count == 0)
            {
                MessageBox.Show("Seleccione una línea para eliminar");
                return;
            }

            // Recorre las filas seleccionadas
            foreach (DataGridViewRow fila in dataGridView1.SelectedRows)
            {
                try
                {
                    // Obtén el ID del producto desde la columna "colId"
                    int id = Convert.ToInt32(fila.Cells["colId"].Value);

                    // Busca el producto con el ID correspondiente
                    var producto = ControladoraProductos.Instance.Listar().FirstOrDefault(p => p.Id == id);

                    if (producto != null)
                    {
                        // Llama al método Eliminar pasando el objeto Producto
                        string devolucion = ControladoraProductos.Instance.Eliminar(producto);
                        MessageBox.Show(devolucion);
                    }
                    else
                    {
                        MessageBox.Show($"No se encontró el producto con el ID {id}");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error al eliminar el producto: {ex.Message}");
                }
            }

            // Actualiza la grilla después de eliminar
            ActualizarGrilla();
        }



    }
}

