<?php
/**
 * compra-productos.php
 * GET → devuelve productos activos (tipoprod 1 y 2) y promos activas para el carrito de compra
 * Incluye campo 'peso' en gramos:
 *   - Productos: campo peso de la tabla productos
 *   - Promos: suma de (peso * cantp) de cada producto en promop JOIN productos
 */
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Authorization, Content-Type');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(204); exit; }

require_once __DIR__ . '/../../config.php';
$db = getDB();

// ── Validar token ─────────────────────────────────────────────────────────────
$headers    = getallheaders();
$authHeader = $headers['Authorization'] ?? $headers['authorization'] ?? '';
if (!preg_match('/Bearer\s+(.+)/i', $authHeader, $m)) {
    http_response_code(401);
    echo json_encode(['ok' => false, 'error' => 'Token requerido']);
    exit;
}
$token = trim($m[1]);
$stmtTok = $db->prepare("SELECT idusuarios_sist FROM admin_sessions WHERE token = ? AND expira > NOW()");
$stmtTok->execute([$token]);
if (!$stmtTok->fetch()) {
    http_response_code(401);
    echo json_encode(['ok' => false, 'error' => 'Sesion invalida o expirada']);
    exit;
}

try {
    // ── Productos activos (tipoprod 1 y 2) — incluye peso ────────────────────
    $productos = $db->query("
        SELECT id_prod, nombreProd AS nombre, presentacion, precio, puntos, peso, tipoprod, codigo
        FROM productos
        WHERE activo = 'SI'
          AND tipoprod IN (1, 2)
        ORDER BY nombreProd
    ")->fetchAll(PDO::FETCH_ASSOC);

    foreach ($productos as &$p) {
        $p['id_prod']  = (int)$p['id_prod'];
        $p['precio']   = (float)$p['precio'];
        $p['puntos']   = (int)$p['puntos'];
        $p['peso']     = (int)($p['peso'] ?? 0);   // gramos
        $p['tipoprod'] = (int)$p['tipoprod'];
        $p['tipo']     = 'producto';
    }
    unset($p);

    // ── Promos activas — peso calculado desde promop JOIN productos ───────────
    $promos = $db->query("
        SELECT id_promo AS id_prod, promodesc AS nombre, precio, puntos
        FROM promod
        WHERE activa = 1
        ORDER BY promodesc
    ")->fetchAll(PDO::FETCH_ASSOC);

    // Calcular peso de cada promo: SUM(productos.peso * promop.cantp)
    $stmtPeso = $db->prepare("
        SELECT COALESCE(SUM(pr.peso * pp.cantp), 0) AS peso_total
        FROM promop pp
        JOIN productos pr ON pr.id_prod = pp.idprodp
        WHERE pp.promop = ?
    ");

    foreach ($promos as &$pr) {
        $pr['id_prod']      = (int)$pr['id_prod'];
        $pr['precio']       = (float)$pr['precio'];
        $pr['puntos']       = (int)$pr['puntos'];
        $pr['presentacion'] = '';
        $pr['tipoprod']     = 0;
        $pr['codigo']       = '';
        $pr['tipo']         = 'paquete';

        // Calcular peso sumando los productos de la promo
        $stmtPeso->execute([$pr['id_prod']]);
        $row = $stmtPeso->fetch(PDO::FETCH_ASSOC);
        $pr['peso'] = (int)($row['peso_total'] ?? 0);
    }
    unset($pr);

    echo json_encode([
        'ok'        => true,
        'productos' => $productos,
        'promos'    => $promos,
    ], JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['ok' => false, 'error' => 'Error: ' . $e->getMessage()]);
}
