<?php
// ventas_envios_api.php
header('Content-Type: application/json');
if (session_status() !== PHP_SESSION_ACTIVE) {
    session_start();
}
require __DIR__ . '/../includes/session_control.php';
require_once __DIR__ . '/../cotizaciones/api/_node.php';

$action  = $_REQUEST['action'] ?? '';
$idVenta = isset($_REQUEST['idVenta']) ? (int)$_REQUEST['idVenta'] : 0;

$token = cpn_node_token_or_fail();
$base = cpn_node_api_base();

if ($action === 'list') {
    if (!$idVenta) {
        echo json_encode([]);
        exit;
    }
    $url = $base . '/api/ventas/ordenes/' . urlencode((string)$idVenta) . '/envios';
    $r = cpn_node_request('GET', $url, $token);
    if (!isset($r['ok']) || $r['ok'] !== true) {
        http_response_code($r['_http'] ?? 500);
        echo json_encode([]);
        exit;
    }
    $data = $r['data'] ?? [];
    if (!is_array($data)) $data = [];
    echo json_encode($data);
    exit;
}

if ($action === 'listsel') {
    $url = $base . '/api/ventas/envios/meta';
    $r = cpn_node_request('GET', $url, $token);
    if (!isset($r['ok']) || $r['ok'] !== true) {
        http_response_code($r['_http'] ?? 500);
        echo json_encode(['formas' => [], 'medios' => [], 'transportadoras' => []]);
        exit;
    }
    $meta = $r['data'] ?? [];
    echo json_encode([
        'formas' => $meta['formas'] ?? [],
        'medios' => $meta['medios'] ?? [],
        'transportadoras' => $meta['transportadoras'] ?? [],
    ]);
    exit;
}

if ($action === 'add') {
    if (!$idVenta) {
        http_response_code(400);
        echo json_encode(['success' => false]);
        exit;
    }

    $url = $base . '/api/ventas/ordenes/' . urlencode((string)$idVenta) . '/envios';
    $payload = [
        'fecha' => $_POST['fecha'] ?? '',
        'idFormaEntrega' => $_POST['idFormaEntrega'] ?? null,
        'idMedio' => $_POST['idMedio'] ?? null,
        'idTransportadora' => $_POST['idTransportadora'] ?? null,
        'descripcion' => $_POST['descripcion'] ?? '',
        'idUsuarioDireccion' => $_POST['idUsuarioDireccion'] ?? null,
        'guiaSeguimiento' => $_POST['guiaSeguimiento'] ?? null,
        'observaciones' => $_POST['observaciones'] ?? null,
        'largo_paquete' => $_POST['largo_paquete'] ?? null,
        'alto_paquete' => $_POST['alto_paquete'] ?? null,
        'ancho_paquete' => $_POST['ancho_paquete'] ?? null,
        'peso_kg' => $_POST['peso_kg'] ?? null,
        'precioEnvio' => $_POST['precioEnvio'] ?? null,
    ];
    $r = cpn_node_request('POST', $url, $token, $payload);
    if (!isset($r['ok']) || $r['ok'] !== true) {
        http_response_code($r['_http'] ?? 500);
        echo json_encode(['success' => false, 'error' => ($r['error']['message'] ?? 'Error')]);
        exit;
    }
    echo json_encode(['success' => true]);
    exit;
}

if ($action === 'update') {
    $id = isset($_POST['id']) ? (int)$_POST['id'] : 0;
    $field = $_POST['field'] ?? '';
    $value = $_POST['value'] ?? null;
    if (!$id || $field === '') {
        http_response_code(400);
        echo json_encode(['success' => false]);
        exit;
    }

    $url = $base . '/api/ventas/envios/' . urlencode((string)$id);
    $r = cpn_node_request('PATCH', $url, $token, ['field' => $field, 'value' => $value]);
    if (!isset($r['ok']) || $r['ok'] !== true) {
        http_response_code($r['_http'] ?? 500);
        echo json_encode(['success' => false, 'error' => ($r['error']['message'] ?? 'Error')]);
        exit;
    }
    echo json_encode(['success' => true]);
    exit;
}

if ($action === 'delete') {
    $id = isset($_POST['idRegistro']) ? (int)$_POST['idRegistro'] : 0;
    if (!$id) {
        http_response_code(400);
        echo json_encode(['success' => false]);
        exit;
    }

    $url = $base . '/api/ventas/envios/' . urlencode((string)$id);
    $r = cpn_node_request('DELETE', $url, $token);
    if (!isset($r['ok']) || $r['ok'] !== true) {
        http_response_code($r['_http'] ?? 500);
        echo json_encode(['success' => false, 'error' => ($r['error']['message'] ?? 'Error')]);
        exit;
    }
    echo json_encode(['success' => true]);
    exit;
}

echo json_encode(['error' => 'Acción inválida']);
