<?php

class MostrarAbastecimientos {
    private $conexion;

    public function __construct($conn) {
        if (!$conn || !method_exists($conn, 'executeQuery')) {
            throw new InvalidArgumentException("Conexión inválida o sin método executeQuery.");
        }
        $this->conexion = $conn;
    }

    /**
     * Devuelve todos los registros de control de combustible
     * incluyendo el combustible abastecido. Para registros antiguos
     * sin dato, se usa el tipo del vehículo cuando sea 1, 2 o 3.
     */
    public function ObtenerTodos(): array {
        $sql = "
            SELECT 
                cc.id,
                v.placa AS vehiculo,
                CONCAT(c.nombres, ' ', c.apellidos) AS chofer,
                g.nombre AS grifo,
                /* Combustible abastecido con fallback solo para no-mixtos */
                COALESCE(
                    cc.combustible_abastecido,
                    CASE v.tipo_combustible_id
                        WHEN 1 THEN 'DIESEL B5(DB5)'
                        WHEN 2 THEN 'G-REGULAR'
                        WHEN 3 THEN 'G-PREMIUM'
                        ELSE NULL
                    END
                ) AS combustible_abastecido,
                cc.cantidad_gln,
                cc.valor_unitario_gln,
                cc.kilometraje,
                cc.numero_vale,
                cc.fecha_abastecimiento,
                cc.hora_abastecimiento
            FROM control_combustible cc
            INNER JOIN vehiculos v   ON cc.vehiculo_id = v.id
            INNER JOIN choferes  c   ON cc.chofer_id   = c.id
            INNER JOIN grifos    g   ON cc.grifo_id    = g.id
            ORDER BY cc.fecha_abastecimiento DESC, cc.hora_abastecimiento DESC
        ";

        $result = $this->conexion->executeQuery($sql);
        if (!$result) {
            $error = method_exists($this->conexion, 'getConnection')
                ? $this->conexion->getConnection()->error
                : 'Error desconocido en la conexión.';
            throw new Exception("Error al ejecutar la consulta: " . $error);
        }

        $datos = [];
        while ($row = $result->fetch_assoc()) {
            $datos[] = $row;
        }
        return $datos;
    }
}
