<?php
/**
 * asignacion-detalle.php — Detalle de una transacción de asignación (tipo 12)
 * GET /admin/api/asignacion-detalle.php?id={idtransacciones}
 *
 * Retorna los productos asignados (desde pedido_real), datos del distribuidor
 * y la nota origen (nsalida).
 */

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, OPTIONS');
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(['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(['error' => 'Sesión expirada o inválida']);
    exit;
}

// ── Parámetro ID ──────────────────────────────────────────────────────────
$id_tx = isset($_GET['id']) ? (int)$_GET['id'] : 0;
if ($id_tx <= 0) {
    http_response_code(400);
    echo json_encode(['error' => 'ID de transacción requerido']);
    exit;
}

try {
    // ── 1. Datos generales de la asignación ───────────────────────────────
    $stmt = $db->prepare("
        SELECT
            t.idtransacciones, t.fechat, t.tipostr_idtipostr,
            i.nombre, i.appat, i.apmat, i.referencia, i.rfc,
            COALESCE(d.puntos, 0) AS puntos,
            a.nsalida AS nota_origen_id,
            uc.idusuarios_ci, uc.nombre AS centro_nombre
        FROM transacciones t
        JOIN inversionista i ON i.id_inver = t.inversionista_id_inver
        JOIN depositos d     ON d.transacciones_idtransacciones = t.idtransacciones
        LEFT JOIN asignaciones a ON a.idtransacciones = t.idtransacciones
        LEFT JOIN usuarios_ci uc ON uc.idusuarios_ci = t.usuarios_ci_idusuarios_ci
        WHERE t.idtransacciones = ?
    ");
    $stmt->execute([$id_tx]);
    $row = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$row) {
        http_response_code(404);
        echo json_encode(['error' => 'Asignación no encontrada']);
        exit;
    }

    $ciId   = $row['idusuarios_ci'] ?? null;
    $ciNom  = $row['centro_nombre'] ?? null;
    $centro = ($ciId && $ciNom) ? $ciId . ' - ' . $ciNom : ($ciNom ?? '—');

    // ── 2. Productos asignados (pedido_real de esta asignación) ───────────
    $stmt2 = $db->prepare("SELECT id_prod, cant FROM pedido_real WHERE transacciones = ?");
    $stmt2->execute([$id_tx]);
    $items = $stmt2->fetchAll(PDO::FETCH_ASSOC);

    $pedido = [];
    $puntos_total = 0;
    foreach ($items as $item) {
        $id_prod  = (int)$item['id_prod'];
        $cantidad = (int)$item['cant'];

        if ($id_prod < 1000) {
            $sp = $db->prepare("SELECT nombreProd AS nombre, precio, puntos FROM productos WHERE id_prod = ?");
        } else {
            $sp = $db->prepare("SELECT promodesc AS nombre, precio, puntos FROM promod WHERE id_promo = ?");
        }
        $sp->execute([$id_prod]);
        $prod = $sp->fetch(PDO::FETCH_ASSOC);

        $pts_prod = (int)($prod['puntos'] ?? 0);
        $puntos_total += $pts_prod * $cantidad;

        $pedido[] = [
            'id_prod'  => $id_prod,
            'nombre'   => $prod['nombre'] ?? 'Producto',
            'cant'     => $cantidad,
            'precio'   => (float)($prod['precio'] ?? 0),
            'puntos'   => $pts_prod,
            'es_promo' => $id_prod >= 1000,
        ];
    }

    // ── Respuesta ──────────────────────────────────────────────────────────
    echo json_encode([
        'success' => true,
        'asignacion' => [
            'idtransacciones' => $id_tx,
            'folio'           => 'RRB-' . str_pad((string)$id_tx, 6, '0', STR_PAD_LEFT),
            'fechat'          => $row['fechat'],
            'nombre_completo' => trim($row['nombre'] . ' ' . $row['appat'] . ' ' . ($row['apmat'] ?? '')),
            'referencia'      => $row['referencia'],
            'rfc'             => $row['rfc'],
            'puntos'          => (int)$row['puntos'],
            'puntos_total'    => $puntos_total,
            'nota_origen_id'  => $row['nota_origen_id'],
            'centro'          => $centro,
        ],
        'pedido' => $pedido,
    ], JSON_UNESCAPED_UNICODE);

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