<?php
require_once '../services/pdo_connection.php';

class DetallePedido
{
    private $conn;

    public function __construct()
    {
        $database = new Database();
        $this->conn = $database->getConnection();
    }

    public function createDetalle($idPedido, $idProducto, $titulo, $cantidad, $precioUnitario)
    {
        try {
            $query = "INSERT INTO detalle_pedido (id_pedido, id_producto, titulo_producto, cantidad, precio_unitario) 
                 VALUES (:id_pedido, :id_producto, :titulo_producto, :cantidad, :precio_unitario)";

            $stmt = $this->conn->prepare($query);
            $stmt->bindParam(':id_pedido', $idPedido, PDO::PARAM_INT);

            // Manejar id_producto NULL
            if ($idProducto === null) {
                $stmt->bindValue(':id_producto', null, PDO::PARAM_NULL);
            } else {
                $stmt->bindParam(':id_producto', $idProducto, PDO::PARAM_INT);
            }

            $stmt->bindParam(':titulo_producto', $titulo, PDO::PARAM_STR);
            $stmt->bindParam(':cantidad', $cantidad, PDO::PARAM_INT);
            $stmt->bindParam(':precio_unitario', $precioUnitario);

            return $stmt->execute();
        } catch (PDOException $e) {
            error_log("Error en createDetalle: " . $e->getMessage());
            return false;
        }
    }

    public function getDetallesByPedidoId($idPedido)
    {
        try {
            $query = "SELECT 
                        id_detalle,
                        id_pedido,
                        id_producto,
                        titulo_producto,
                        cantidad,
                        precio_unitario,
                        total_linea
                      FROM detalle_pedido 
                      WHERE id_pedido = :id_pedido
                      ORDER BY id_detalle ASC";

            $stmt = $this->conn->prepare($query);
            $stmt->bindParam(':id_pedido', $idPedido, PDO::PARAM_INT);
            $stmt->execute();

            return $stmt->fetchAll(PDO::FETCH_ASSOC);
        } catch (PDOException $e) {
            error_log("Error al obtener detalles de pedido: " . $e->getMessage());
            return [];
        }
    }

    public function getTotalPedido($idPedido)
    {
        try {
            $query = "SELECT SUM(total_linea) as total_pedido
                      FROM detalle_pedido
                      WHERE id_pedido = :id_pedido";

            $stmt = $this->conn->prepare($query);
            $stmt->bindParam(':id_pedido', $idPedido, PDO::PARAM_INT);
            $stmt->execute();

            $result = $stmt->fetch(PDO::FETCH_ASSOC);
            return $result['total_pedido'] ?? 0.00;
        } catch (PDOException $e) {
            error_log("Error al calcular total de pedido: " . $e->getMessage());
            return 0.00;
        }
    }
}
