<?php
declare(strict_types=1);
require_once dirname(__FILE__) . '/../config.php';

if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
    jsonErr(405, 'Metodo no permitido.');
}

$jwt   = auth();
$idinv = (int)$jwt['idinv'];
$db    = getDB();

$idtx = isset($_GET['idtransacciones']) ? (int)$_GET['idtransacciones'] : 0;
if (!$idtx) {
    jsonErr(400, 'Se requiere idtransacciones.');
}

try {
    // Verificar que la transacción pertenece al usuario y es tipo 11
    $stmtTx = $db->prepare(
        "SELECT t.idtransacciones, t.fechat, t.nota, t.tipostr_idtipostr,
                t.inversionista_id_inver,
                COALESCE(SUM(d.cantidad), 0) AS cantidad_pagada
         FROM transacciones t
         LEFT JOIN depositos d ON d.transacciones_idtransacciones = t.idtransacciones
         WHERE t.idtransacciones = ?
         GROUP BY t.idtransacciones
         LIMIT 1"
    );
    $stmtTx->execute([$idtx]);
    $tx = $stmtTx->fetch(PDO::FETCH_ASSOC);

    if (!$tx) {
        jsonErr(404, 'Transaccion no encontrada.');
    }
    if ((int)$tx['inversionista_id_inver'] !== $idinv) {
        jsonErr(403, 'Sin permiso para ver esta nota.');
    }
    if ((int)$tx['tipostr_idtipostr'] !== 11) {
        jsonErr(400, 'Esta transaccion no es una nota por asignar.');
    }

    // Obtener líneas de nsalida con productos normales (id_prod <= 1000)
    $stmtProd = $db->prepare(
        "SELECT ns.id AS idnsalida,
                ns.productos_idprod AS id_prod,
                ns.cant,
                ns.asignar,
                (ns.cant - ns.asignar) AS pendiente,
                p.nombreProd AS nombre,
                p.precio,
                p.puntos
         FROM nsalida ns
         JOIN productos p ON p.id_prod = ns.productos_idprod
         WHERE ns.transacciones_idtransacciones = ?
           AND ns.productos_idprod <= 1000"
    );
    $stmtProd->execute([$idtx]);
    $lineasProd = $stmtProd->fetchAll(PDO::FETCH_ASSOC);

    // Obtener líneas de nsalida con promociones (id_prod > 1000)
    $stmtPromo = $db->prepare(
        "SELECT ns.id AS idnsalida,
                ns.productos_idprod AS id_promo,
                ns.cant,
                ns.asignar,
                (ns.cant - ns.asignar) AS pendiente,
                pr.promodesc AS nombre,
                pr.precio,
                pr.puntos
         FROM nsalida ns
         JOIN promod pr ON pr.id_promo = ns.productos_idprod
         WHERE ns.transacciones_idtransacciones = ?
           AND ns.productos_idprod > 1000"
    );
    $stmtPromo->execute([$idtx]);
    $lineasPromo = $stmtPromo->fetchAll(PDO::FETCH_ASSOC);

    // Unir y normalizar
    $items = [];
    foreach ($lineasProd as $row) {
        $items[] = [
            'idnsalida'  => (int)$row['idnsalida'],
            'id_prod'    => (int)$row['id_prod'],
            'es_promo'   => false,
            'nombre'     => $row['nombre'] ?? 'Producto',
            'precio'     => (float)$row['precio'],
            'puntos'     => (float)$row['puntos'],
            'cant'       => (int)$row['cant'],
            'asignar'    => (int)$row['asignar'],
            'pendiente'  => (int)$row['pendiente'],
        ];
    }
    foreach ($lineasPromo as $row) {
        $items[] = [
            'idnsalida'  => (int)$row['idnsalida'],
            'id_prod'    => (int)$row['id_promo'],
            'es_promo'   => true,
            'nombre'     => $row['nombre'] ?? 'Promocion',
            'precio'     => (float)$row['precio'],
            'puntos'     => (float)$row['puntos'],
            'cant'       => (int)$row['cant'],
            'asignar'    => (int)$row['asignar'],
            'pendiente'  => (int)$row['pendiente'],
        ];
    }

    $totalPendiente = array_sum(array_column($items, 'pendiente'));

    jsonOk([
        'idtransacciones' => (int)$tx['idtransacciones'],
        'fecha'           => $tx['fechat'],
        'nota'            => $tx['nota'] ?? '',
        'cantidad_pagada' => (float)$tx['cantidad_pagada'],
        'items'           => $items,
        'total_pendiente' => $totalPendiente,
    ]);

} catch (Throwable $e) {
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'message' => 'Error interno: ' . $e->getMessage(),
    ], JSON_UNESCAPED_UNICODE);
    exit;
}
