<?php
namespace App\Models;

use CodeIgniter\Model;

class ReportModel extends Model
{
    protected $table      = 'venta_detalles';
    protected $primaryKey = 'id_detalle';
    protected $returnType = 'array';
    protected $useTimestamps = false;

    public function getFilteredSales($startDate = null, $endDate = null, $categoryId = null, $productId = null)
    {
        $db = \Config\Database::connect();
        $builder = $db->table('venta_detalles vd');
        $builder->select('vd.*, v.fecha, v.id_venta, v.total as venta_total, p.nombre as producto_nombre,
                          p.codigo_unico, c.nombre as categoria_nombre, u.username');
        $builder->join('ventas v', 'v.id_venta = vd.id_venta');
        $builder->join('productos p', 'p.id_producto = vd.id_producto');
        $builder->join('categorias c', 'c.id_categoria = p.id_categoria');
        $builder->join('usuarios u', 'u.id_usuario = v.id_usuario');

        if ($startDate && $endDate) {
            $builder->where('DATE(v.fecha) >=', $startDate);
            $builder->where('DATE(v.fecha) <=', $endDate);
        }
        if ($categoryId) {
            $builder->where('p.id_categoria', $categoryId);
        }
        if ($productId) {
            $builder->where('vd.id_producto', $productId);
        }

        return $builder->orderBy('v.fecha', 'DESC')->get()->getResultArray();
    }

    public function getFilteredProfits($startDate = null, $endDate = null, $categoryId = null, $productId = null)
    {
        $db = \Config\Database::connect();
        $builder = $db->table('venta_detalles vd');
        $builder->select('vd.id_venta, v.fecha,
                          SUM(vd.cantidad * (vd.precio_unitario - vd.costo_unitario)) as ganancia');
        $builder->join('ventas v', 'v.id_venta = vd.id_venta');
        $builder->join('productos p', 'p.id_producto = vd.id_producto');

        if ($startDate && $endDate) {
            $builder->where('DATE(v.fecha) >=', $startDate);
            $builder->where('DATE(v.fecha) <=', $endDate);
        }
        if ($categoryId) {
            $builder->where('p.id_categoria', $categoryId);
        }
        if ($productId) {
            $builder->where('vd.id_producto', $productId);
        }

        return $builder->groupBy('vd.id_venta')
                       ->orderBy('v.fecha', 'DESC')
                       ->get()
                       ->getResultArray();
    }
}
