<?php

namespace App\Models\Logistica;

use CodeIgniter\Model;
use CodeIgniter\Database\BaseBuilder;

class EnvioLineaModel extends Model
{
    protected $table = 'envios_lineas';
    protected $primaryKey = 'id';

    protected $useAutoIncrement = true;
    protected $returnType = \App\Entities\Logistica\EnvioLineaEntity::class;
    protected $useSoftDeletes = false;

    protected $allowedFields = [
        'envio_id',
        'pedido_id',
        'unidades_envio',
        'unidades_total',
        'created_at',
        'updated_at',
        'created_by',
        'updated_by',
        'presupuesto_id',
    ];

    protected $useTimestamps = true;
    protected $createdField = 'created_at';
    protected $updatedField = 'updated_at';

    public function getDatatableQuery($envio_id = null): BaseBuilder
    {
        $builder = $this->db
            ->table($this->table . " t1")
            ->select(
                "t1.id, t1.pedido_id as pedido, t3.id as presupuesto,
                t3.titulo as titulo, t1.unidades_envio as unidadesEnvio, t1.unidades_envio as unidadesEnvioRaw, 
                t1.unidades_total as unidadesTotal,
                IFNULL((
                    SELECT SUM(t_sub.unidades_envio)
                    FROM " . $this->table . " t_sub
                    JOIN envios e ON e.id = t_sub.envio_id
                    JOIN presupuesto_direcciones d ON d.presupuesto_id = t_sub.presupuesto_id
                    WHERE e.finalizado = 1
                    AND t_sub.pedido_id = t1.pedido_id
                    AND e.direccion = d.direccion COLLATE utf8mb3_general_ci
                    AND (
                        t_sub.envio_id <> t1.envio_id
                        OR (t_sub.envio_id = t1.envio_id AND (
                            SELECT finalizado FROM envios WHERE id = t1.envio_id
                        ) = 1)
                    )
                ), 0) as unidadesEnviadas,
                IFNULL((
                    SELECT ROUND(SUM(peso) / 1000, 1)
                    FROM presupuesto_linea
                    WHERE presupuesto_id = t3.id
                ), 0) AS pesoUnidad,
                t2.finalizado as finalizado,"
            );
        $builder->join("envios t2", "t1.envio_id = t2.id", "left");
        $builder->join("presupuestos t3", "t1.presupuesto_id = t3.id", "left");

        $builder->where("t1.envio_id", $envio_id);

        return $builder;
    }


}
