<?php
/**
 * /api/lab/eps.php
 * GET  ?action=list [solo_activas=1]  → lista EPS
 * POST {action:save, id?, nombre}     → crear / renombrar
 * POST {action:toggle, id}            → activar / desactivar
 * POST {action:delete, id}            → eliminar (solo si no hay pacientes)
 */
require_once __DIR__ . '/_helpers.php';

$pdo = db();

if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    $soloActivas = isset($_GET['solo_activas']) && $_GET['solo_activas'] == '1';
    $sql  = 'SELECT id, nombre, activa, orden FROM lab_eps' . ($soloActivas ? ' WHERE activa = 1' : '') . ' ORDER BY nombre';
    $rows = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
    jsonOk(['eps' => $rows]);
}

requireMethod('POST');
requireAdmin();

$body   = inputJson();
$action = trim($body['action'] ?? '');

if ($action === 'save') {
    $nombre = trim($body['nombre'] ?? '');
    $id     = (int)($body['id'] ?? 0);
    if (!$nombre) jsonError('nombre requerido.');
    if (strlen($nombre) > 120) jsonError('nombre demasiado largo (máx 120).');

    if ($id) {
        $pdo->prepare('UPDATE lab_eps SET nombre = ? WHERE id = ?')->execute([$nombre, $id]);
        jsonOk(['id' => $id], 'EPS actualizada.');
    } else {
        $st = $pdo->prepare('INSERT INTO lab_eps (nombre) VALUES (?)');
        try {
            $st->execute([$nombre]);
        } catch (\PDOException $e) {
            if ($e->getCode() == 23000) jsonError('Ya existe una EPS con ese nombre.');
            throw $e;
        }
        jsonOk(['id' => (int)$pdo->lastInsertId()], 'EPS creada.');
    }
}

if ($action === 'toggle') {
    $id = (int)($body['id'] ?? 0);
    if (!$id) jsonError('id requerido.');
    $pdo->prepare('UPDATE lab_eps SET activa = NOT activa WHERE id = ?')->execute([$id]);
    jsonOk([], 'Estado actualizado.');
}

if ($action === 'delete') {
    $id = (int)($body['id'] ?? 0);
    if (!$id) jsonError('id requerido.');
    $uso = $pdo->prepare('SELECT COUNT(*) FROM lab_pacientes WHERE eps = (SELECT nombre FROM lab_eps WHERE id = ?)');
    $uso->execute([$id]);
    if ((int)$uso->fetchColumn() > 0) jsonError('No se puede eliminar: hay pacientes con esta EPS. Desactívela en su lugar.');
    $pdo->prepare('DELETE FROM lab_eps WHERE id = ?')->execute([$id]);
    jsonOk([], 'EPS eliminada.');
}

jsonError('action inválida.');
