<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }

require_once __DIR__ . '/../../config.php';

// ── Verificar token admin ─────────────────────────────────────────────────────
$headers    = getallheaders();
$authHeader = $headers['Authorization'] ?? $headers['authorization'] ?? '';
$token      = str_replace('Bearer ', '', $authHeader);

if (empty($token)) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => 'Token requerido']);
    exit;
}

$db  = getDB();
$now = date('Y-m-d H:i:s');

$stmtSess = $db->prepare(
    "SELECT s.idusuarios_sist FROM admin_sessions s
     WHERE s.token = ? AND s.expira > ? LIMIT 1"
);
$stmtSess->execute([$token, $now]);
if (!$stmtSess->fetch()) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => 'Sesión expirada o inválida']);
    exit;
}

// ── Endpoint especial: listar bancos ─────────────────────────────────────────
// Tabla real: bancos (plural) con columnas: idbanco, cuenta, numero, activa, tipo
if (isset($_GET['bancos'])) {
    $stmtB = $db->query("SELECT idbanco AS id, cuenta AS banco, numero FROM bancos WHERE activa = 1 ORDER BY cuenta");
    $bancos = $stmtB->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode(['success' => true, 'bancos' => $bancos]);
    exit;
}

// ── Endpoint especial: detalle de una orden (productos) ──────────────────────
// GET ?detalle=idtransacciones
// pedido_real: id_pedreal, transacciones (FK), id_prod, cant
// Si id_prod > 1000 → promod; si id_prod <= 1000 → productos
if (isset($_GET['detalle'])) {
    $idTx = (int)$_GET['detalle'];
    if ($idTx <= 0) {
        http_response_code(400);
        echo json_encode(['success' => false, 'message' => 'ID inválido']);
        exit;
    }
    $stmtProd = $db->prepare("
        SELECT pr.id_prod AS id, p.nombreProd AS nombre, p.precio, p.puntos, pr.cant AS cantidad, 'producto' AS tipo
        FROM pedido_real pr
        JOIN productos p ON p.id_prod = pr.id_prod
        WHERE pr.transacciones = ? AND pr.id_prod <= 1000
        UNION ALL
        SELECT pr2.id_prod AS id, pm.promodesc AS nombre, pm.precio, pm.puntos, pr2.cant AS cantidad, 'promo' AS tipo
        FROM pedido_real pr2
        JOIN promod pm ON pm.id_promo = pr2.id_prod
        WHERE pr2.transacciones = ? AND pr2.id_prod > 1000
    ");
    $stmtProd->execute([$idTx, $idTx]);
    $productos = $stmtProd->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode(['success' => true, 'productos' => $productos]);
    exit;
}

// ── Obtener órdenes pendientes (tipo 7 = venta pendiente, 8 = salida pendiente) ─
$stmt = $db->prepare("
    SELECT
        t.idtransacciones,
        t.tipostr_idtipostr AS tipo,
        t.fechat AS fecha,
        t.consec,
        t.cdentrega,
        t.skydropx_rate_id,
        i.id_inver,
        CONCAT(i.nombre, ' ', i.appat, ' ', i.apmat) AS distribuidor,
        i.email,
        i.tel1,
        d.cantidad AS total,
        d.puntos,
        d.no_ficha,
        d.banco_idbanco,
        pv.porpagar,
        ta.id_direccionenvio,
        ta.costoEnvio,
        ta.confirmaDeposito,
        ta.metodoPago,
        ta.telefono AS tel_envio,
        ta.peso,
        de.calle,
        de.noExt,
        de.noInt,
        de.colonia,
        de.ciudad,
        de.estado,
        de.cp,
        de.referencia
    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 pagovta pv ON pv.idtransacciones = t.idtransacciones
    LEFT JOIN transaccion_adicionales ta ON ta.idtransacciones = t.idtransacciones
    LEFT JOIN direccionenvio de ON de.id = ta.id_direccionenvio
    WHERE t.tipostr_idtipostr IN (7, 8)
    ORDER BY t.fechat DESC
    LIMIT 200
");
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

$result = [];
foreach ($rows as $row) {
    $idTx       = (int)$row['idtransacciones'];
    $tieneEnvio = !empty($row['id_direccionenvio']) || (int)$row['cdentrega'] === 8;

    $result[] = [
        'idtransacciones'   => $idTx,
        'tipo'              => (int)$row['tipo'],
        'fecha'             => $row['fecha'],
        'consec'            => $row['consec'],
        'cdentrega'         => (int)$row['cdentrega'],
        'id_inver'          => (int)$row['id_inver'],
        'distribuidor'      => trim($row['distribuidor']),
        'email'             => $row['email'],
        'tel'               => $row['tel1'],
        'total'             => (float)$row['total'],
        'puntos'            => (int)$row['puntos'],
        'porpagar'          => (float)($row['porpagar'] ?? 0),
        'tiene_envio'       => $tieneEnvio,
        'costo_envio'       => (float)($row['costoEnvio'] ?? 0),
        'metodo_pago'       => $row['metodoPago'] ?? null,
        'confirma_deposito' => (int)($row['confirmaDeposito'] ?? 0),
        'skydropx_rate_id'  => $row['skydropx_rate_id'] ?? null,
        'no_ficha'          => $row['no_ficha'] ?? null,
        'banco_idbanco'     => $row['banco_idbanco'] ?? null,
        'direccion'         => $tieneEnvio && $row['id_direccionenvio'] ? [
            'calle'      => $row['calle']      ?? '',
            'noExt'      => $row['noExt']      ?? '',
            'noInt'      => $row['noInt']      ?? '',
            'colonia'    => $row['colonia']    ?? '',
            'ciudad'     => $row['ciudad']     ?? '',
            'estado'     => $row['estado']     ?? '',
            'cp'         => $row['cp']         ?? '',
            'referencia' => $row['referencia'] ?? '',
            'tel'        => $row['tel_envio']  ?? $row['tel1'] ?? '',
            'peso'       => $row['peso'] !== null ? (float)$row['peso'] : null,
        ] : null,
    ];
}

echo json_encode(['success' => true, 'data' => $result]);
