<?php
// Consolidated puertos API: handles get_puertos, update_puertos, asignar_puertos
// Expects $route from api/index.php and bootstrap loaded

$archivoPuertos = __DIR__ . '/../data/puertos.json';

// Compatibilidad legacy: permitir acceso directo a /api/api_puertos.php?chipid=<chipid>
// cuando no se pasa por el router (no existe $route).
if (!isset($route)) {
    // Cargar bootstrap para CORS/headers JSON si está disponible
    $bootstrap = __DIR__ . '/bootstrap.php';
    if (file_exists($bootstrap)) {
        require_once $bootstrap;
    } else {
        // En caso extremo, asegurar Content-Type JSON
        if (!headers_sent()) {
            header('Content-Type: application/json; charset=utf-8');
        }
    }

    $puertos = file_exists($archivoPuertos) ? json_decode(file_get_contents($archivoPuertos), true) : [];
    if (!isset($_GET['chipid'])) {
        echo json_encode(['error' => "Debe especificar el parámetro 'chipid'"]);
        exit;
    }
    $chipid = $_GET['chipid'];
    if (is_array($puertos) && array_key_exists($chipid, $puertos)) {
        echo json_encode($puertos[$chipid]);
    } else {
        echo json_encode(['error' => 'ChipID no encontrado']);
    }
    exit;
}

switch ($route) {
    case 'get_puertos': {
        $puertos = file_exists($archivoPuertos) ? json_decode(file_get_contents($archivoPuertos), true) : [];
        if (!isset($_GET['chipid'])) {
            echo json_encode(['error' => "Debe especificar el parámetro 'chipid'"]);
            break;
        }
        $chipid = $_GET['chipid'];
        if (array_key_exists($chipid, $puertos)) {
            echo json_encode($puertos[$chipid]);
        } else {
            echo json_encode(['error' => 'ChipID no encontrado']);
        }
        break;
    }

    case 'asignar_puertos': {
        if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
            echo json_encode(['success' => false, 'message' => 'Método no permitido']);
            break;
        }
        $data = json_decode(file_get_contents('php://input'), true);
        if (!is_array($data) || empty($data)) {
            echo json_encode(['success' => false, 'message' => 'Datos inválidos']);
            break;
        }
        $puertos = file_exists($archivoPuertos) ? json_decode(file_get_contents($archivoPuertos), true) : [];
        if (!is_array($puertos)) {
            echo json_encode(['success' => false, 'message' => 'Error al leer el archivo de puertos']);
            break;
        }
        foreach ($data as $chipid => $config) {
            if (!isset($puertos[$chipid])) { $puertos[$chipid] = []; }
            foreach ($config as $puerto => $valores) {
                if (!is_array($valores)) continue;
                $puertos[$chipid][$puerto] = [
                    'gpio'  => $valores['gpio'],
                    'disp'  => $valores['disp'] ?? null,
                    'modo'  => $valores['modo'] ?? 'INPUT_PULLUP',
                    'notas' => $valores['notas'] ?? '',
                ];
            }
            $date = new DateTime('now', new DateTimeZone('America/Argentina/Buenos_Aires'));
            $puertos[$chipid]['update'] = $date->format('Y-m-d H:i:s');
        }
        if (file_put_contents($archivoPuertos, json_encode($puertos, JSON_PRETTY_PRINT))) {
            echo json_encode(['success' => true, 'message' => 'Dispositivo actualizado con éxito']);
        } else {
            echo json_encode(['success' => false, 'message' => 'Error al guardar el archivo']);
        }
        break;
    }

    case 'update_puertos': {
        if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
            echo json_encode(['success' => false, 'message' => 'Método no permitido']);
            break;
        }
        $data = json_decode(file_get_contents('php://input'), true);
        if (!is_array($data) || empty($data)) {
            echo json_encode(['success' => false, 'message' => 'Datos inválidos']);
            break;
        }
        $puertos = file_exists($archivoPuertos) ? json_decode(file_get_contents($archivoPuertos), true) : [];
        foreach ($data as $chipid => $puertosRecibidos) {
            if (!isset($puertos[$chipid])) { continue; }
            foreach ($puertosRecibidos as $puerto => $valores) {
                if ($puerto === 'update') continue;
                if (isset($puertos[$chipid][$puerto])) {
                    if (!is_array($valores)) {
                        continue;
                    }
                    if (array_key_exists('disp', $valores)) {
                        $puertos[$chipid][$puerto]['disp'] = $valores['disp'];
                    }
                    if (array_key_exists('notas', $valores)) {
                        $puertos[$chipid][$puerto]['notas'] = $valores['notas'];
                    }
                    if (array_key_exists('modo', $valores)) {
                        $puertos[$chipid][$puerto]['modo'] = $valores['modo'];
                    }
                }
            }
            $puertos[$chipid]['update'] = date('Y-m-d H:i:s');
        }
        if (file_put_contents($archivoPuertos, json_encode($puertos, JSON_PRETTY_PRINT))) {
            echo json_encode(['success' => true, 'message' => 'Puertos actualizados con éxito']);
        } else {
            echo json_encode(['success' => false, 'message' => 'Error al guardar el archivo']);
        }
        break;
    }

    default:
        json_error('Ruta no soportada en api_puertos', 404);
}
