import 'package:flutter/material.dart';
import 'package:turquessa_mesas_hoster/core/models/categoria_producto_model.dart';
import 'package:turquessa_mesas_hoster/core/models/media_model.dart';
import 'package:turquessa_mesas_hoster/core/models/pedido_model.dart';
import 'package:turquessa_mesas_hoster/core/models/producto_model.dart';

class CreacionPedidoViewModel extends ChangeNotifier {
  // Lista de productos disponibles para elegir
  final List<Producto> _productosDisponibles = <Producto>[
    Producto(
      id: 1, // Añadido id para facilitar la búsqueda
      idCategoria: 1,
      nombre: 'Café Latte',
      descripcion: 'Café con leche y espuma',
      imagen: 'https://example.com/cafe_latte.jpg',
      venta: 1,
      existencia: 50,
      precio: 4.50,
      verMenu: 1,
      codigo: 'CL001',
      descuento: '10%',
      toping: 1,
      topings: [
        Producto(id: 1, nombre: 'Crema Batida', precio: 0.50),
        Producto(id: 2, nombre: 'Chocolate', precio: 0.75),
      ],
      activo: 1,
      media: [],
      idWeb: 101,
      sincronizado: 'Sí',
    ),
    Producto(
      id: 2,
      idCategoria: 1,
      nombre: 'Pizza al horno',
      descripcion: 'Pizza tradicional italiana',
      imagen: 'https://example.com/pizza.jpg',
      venta: 1,
      existencia: 50,
      precio: 4.50,
      verMenu: 1,
      codigo: 'PZ001',
      descuento: '10%',
      toping: 1,
      topings: [
        Producto(id: 3, nombre: 'Extra queso', precio: 0.50),
        Producto(id: 4, nombre: 'Champiñones', precio: 0.75),
      ],
      activo: 1,
      media: [],
      idWeb: 102,
      sincronizado: 'Sí',
    ),
    Producto(
      id: 3,
      idCategoria: 1,
      nombre: 'Capuchino',
      descripcion: 'Café con espuma de leche',
      imagen: 'https://example.com/capuchino.jpg',
      venta: 1,
      existencia: 50,
      precio: 4.50,
      verMenu: 1,
      codigo: 'CP001',
      descuento: '10%',
      toping: 1,
      topings: [
        Producto(id: 1, nombre: 'Crema Batida', precio: 0.50),
        Producto(id: 5, nombre: 'Canela', precio: 0.25),
      ],
      activo: 1,
      media: [],
      idWeb: 103,
      sincronizado: 'Sí',
    ),
    Producto(
      id: 4,
      idCategoria: 1,
      nombre: 'Pastel de Chocolate',
      descripcion: 'Pastel casero de chocolate',
      imagen: 'https://example.com/pastel.jpg',
      venta: 1,
      existencia: 50,
      precio: 4.50,
      verMenu: 1,
      codigo: 'PC001',
      descuento: '10%',
      toping: 1,
      topings: [
        Producto(id: 6, nombre: 'Helado', precio: 1.00),
        Producto(id: 7, nombre: 'Frutos rojos', precio: 0.75),
      ],
      activo: 1,
      media: [],
      idWeb: 104,
      sincronizado: 'Sí',
    )
  ];

  // Lista del carrito que se mostrará en el DataTable
  final List<Producto> _carrito = [];

  // Getters
  List<Producto> get productosDisponibles => _productosDisponibles;
  List<Producto> get carrito => _carrito;

  // Método para agregar un producto al carrito
  void agregarAlCarrito(Producto producto) {
    // Buscar si el producto ya está en el carrito
    int index = _carrito.indexWhere((p) => p.id == producto.id);

    if (index != -1) {
      // Si ya existe en el carrito, incrementar cantidad
      _carrito[index].venta = (_carrito[index].venta ?? 0) + 1;
    } else {
      // Si no existe, crear una copia del producto y añadirlo al carrito
      final productoCarrito = Producto(
        id: producto.id,
        nombre: producto.nombre,
        precio: producto.precio,
        descripcion: producto.descripcion,
        imagen: producto.imagen,
        venta: 1, // Iniciar con cantidad 1
        codigo: producto.codigo,
        topings: producto.topings,
        // Otros atributos que necesites copiar
      );
      _carrito.add(productoCarrito);
    }
    notifyListeners();
  }

  // Método para reducir la cantidad de un producto en el carrito
  void reducirDelCarrito(Producto producto) {
    int index = _carrito.indexWhere((p) => p.id == producto.id);

    if (index != -1) {
      if (_carrito[index].venta! > 1) {
        // Reducir cantidad si es mayor que 1
        _carrito[index].venta = _carrito[index].venta! - 1;
      } else {
        // Eliminar del carrito si la cantidad llega a 0
        _carrito.removeAt(index);
      }
      notifyListeners();
    }
  }

  // Método para eliminar un producto específico del carrito
  void eliminarDelCarrito(Producto producto) {
    _carrito.removeWhere((p) => p.id == producto.id);
    notifyListeners();
  }

  // Método para limpiar todo el carrito
  void limpiarCarrito() {
    _carrito.clear();
    notifyListeners();
  }

  // Método para calcular el total del carrito
  double calcularTotalCarrito() {
    return _carrito.fold(
        0,
        (total, producto) =>
            total + ((producto.precio ?? 0) * (producto.venta ?? 0)));
  }
}
