<?php
/**
 * POST /api/lab/save_formulario.php
 * Solo admins pueden crear/editar plantillas.
 *
 * Body JSON para crear:  { nombre, descripcion?, categoria?, esquema, permite_firma?, requiere_firma? }
 * Body JSON para editar: { id, ...mismos campos... }
 * Body JSON para borrar: { id, borrar: true }
 */
require_once __DIR__ . '/_helpers.php';
requireMethod('POST');
requireModuleWrite('lab_formularios');   // admins y roles con permiso write pueden crear/editar

try {
    $datos = inputJson();
    $form  = new Formulario();
    $admin = adminId();

    // Borrar (soft delete)
    if (!empty($datos['id']) && !empty($datos['borrar'])) {
        $form->actualizar((int)$datos['id'], ['is_active' => 0], $admin);
        jsonOk(['id' => (int)$datos['id']], 'Formulario eliminado');
    }

    // Clonar
    if (!empty($datos['id']) && !empty($datos['clonar'])) {
        $original = $form->obtener((int)$datos['id']);
        if (!$original) jsonError('Formulario no encontrado', 404);
        $nuevoId = $form->crear([
            'nombre'         => 'Copia de ' . $original['nombre'],
            'descripcion'    => $original['descripcion'] ?? null,
            'categoria'      => $original['categoria']   ?? 'otro',
            'esquema'        => $original['esquema']     ?? '[]',
            'permite_firma'  => $original['permite_firma']  ?? 0,
            'requiere_firma' => $original['requiere_firma'] ?? 0,
        ], $admin);
        jsonOk(['id' => $nuevoId], 'Formulario clonado');
    }

    // Editar
    if (!empty($datos['id'])) {
        $id = (int)$datos['id'];
        unset($datos['id']);
        // Verificar que el formulario existe
        $existe = $form->obtener($id);
        if (!$existe) {
            jsonError("Formulario #$id no encontrado en la base de datos", 404);
        }
        $form->actualizar($id, $datos, $admin);
        jsonOk(['id' => $id], 'Formulario actualizado');
    }

    // Crear
    if (empty($datos['nombre'])) jsonError('El nombre es obligatorio');
    if (empty($datos['esquema'])) jsonError('El esquema es obligatorio');

    $id = $form->crear($datos, $admin);
    jsonOk(['id' => $id], 'Formulario creado correctamente');

} catch (InvalidArgumentException $e) {
    jsonError($e->getMessage());
} catch (Exception $e) {
    jsonError($e->getMessage(), 500);
}
