<?php
// /cotizaciones/api/meta.php -> proxy a Node: GET /api/cotizaciones/meta/new

session_start();
include '../../includes/session_control.php';

header('Content-Type: application/json; charset=UTF-8');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');
header('Expires: 0');

if (!isset($_SESSION['user'])) {
    http_response_code(401);
    echo json_encode(['error' => 'No autenticado']);
    exit;
}

require __DIR__ . '/_node.php';

$token = cpn_node_token_or_fail();
$base = cpn_node_api_base();

$url = $base . '/api/cotizaciones/meta/new';
$r = cpn_node_request('GET', $url, $token);

if (!isset($r['ok']) || $r['ok'] !== true) {
    $msg = $r['error']['message'] ?? 'Error consultando meta.';
    $details = $r['error']['details'] ?? ($r['error']['raw'] ?? null);
    http_response_code($r['_http'] ?? 500);
    echo json_encode(['error' => $msg, 'details' => $details, 'http' => $r['_http'] ?? null]);
    exit;
}

$data = $r['data'] ?? [];
$rawDepartamentos = is_array($data['departamentos'] ?? null) ? $data['departamentos'] : [];
$validDepartamentos = array_values(array_filter($rawDepartamentos, static function ($row) {
    $nombre = trim((string)($row['nombre'] ?? ''));
    return $nombre !== '';
}));

if (!empty($validDepartamentos)) {
    usort($validDepartamentos, static function ($a, $b) {
        return strcasecmp((string)($a['nombre'] ?? ''), (string)($b['nombre'] ?? ''));
    });
    $data['departamentos'] = $validDepartamentos;
}

if (empty($data['departamentos'])) {
    $rc = cpn_node_request('GET', $base . '/api/usuarios/ciudades', $token);
    if (isset($rc['ok']) && $rc['ok'] === true && is_array($rc['data'] ?? null)) {
        $catalog = [];
        $depsMap = [];

        foreach (($rc['data'] ?? []) as $row) {
            $id = (int)($row['id'] ?? 0);
            $ciudad = trim((string)($row['ciudad'] ?? ''));
            $departamento = trim((string)($row['departamento'] ?? ''));
            if ($id <= 0 || $ciudad === '') {
                continue;
            }

            $catalog[] = [
                'id' => $id,
                'ciudad' => $ciudad,
                'departamento' => $departamento,
            ];

            if ($departamento !== '' && !isset($depsMap[$departamento])) {
                $depsMap[$departamento] = [
                    'id' => $departamento,
                    'nombre' => $departamento,
                ];
            }
        }

        if (!empty($catalog)) {
            usort($catalog, static function ($a, $b) {
                $cmp = strcasecmp((string)$a['departamento'], (string)$b['departamento']);
                if ($cmp !== 0) {
                    return $cmp;
                }
                return strcasecmp((string)$a['ciudad'], (string)$b['ciudad']);
            });

            $departamentos = array_values($depsMap);
            usort($departamentos, static function ($a, $b) {
                return strcasecmp((string)$a['nombre'], (string)$b['nombre']);
            });

            $data['departamentos'] = $departamentos;
            $data['ciudadesCatalog'] = $catalog;
        }
    }
}

echo json_encode($data);
