<?php
namespace App\Models;

use CodeIgniter\Model;

class ProductModel extends Model
{
    protected $table      = 'productos';
    protected $primaryKey = 'id_producto';
    protected $allowedFields = ['codigo_unico', 'nombre', 'precio_compra', 'precio_venta', 'stock_actual', 'unidad_medida', 'id_categoria', 'imagen'];
    protected $returnType    = 'array';
    protected $useTimestamps = false;

    public function getProductsWithCategory()
    {
        return $this->select('productos.*, categorias.nombre as categoria_nombre')
                    ->join('categorias', 'categorias.id_categoria = productos.id_categoria')
                    ->orderBy('productos.id_producto', 'DESC')
                    ->findAll();
    }

    public function getProductByCode($code)
    {
        return $this->where('codigo_unico', $code)->first();
    }

    public function searchProducts($query)
    {
        return $this->select('productos.*, categorias.nombre as categoria_nombre')
                    ->join('categorias', 'categorias.id_categoria = productos.id_categoria')
                    ->like('productos.nombre', $query)
                    ->orLike('productos.codigo_unico', $query)
                    ->orLike('categorias.nombre', $query)
                    ->orderBy('productos.id_producto', 'DESC')
                    ->findAll();
    }

    public function getLowStockProducts()
    {
        return $this->where('stock_actual <=', 5)
                    ->orderBy('stock_actual', 'ASC')
                    ->findAll();
    }

    public function getCategories()
    {
        $db = \Config\Database::connect();
        return $db->table('categorias')->orderBy('nombre', 'ASC')->get()->getResultArray();
    }

    public function getPaymentMethods()
    {
        $db = \Config\Database::connect();
        return $db->table('formas_pago')->orderBy('nombre', 'ASC')->get()->getResultArray();
    }

    public function updateStock($id, $quantity)
    {
        return $this->update($id, ['stock_actual' => $quantity]);
    }
}

