<?php
/**
 * POST /api/lab/send_formulario.php
 * Crea un envío (instancia) con datos pre-llenados y devuelve el link para WhatsApp.
 * Accesible por admin Y enfermero.
 *
 * Body JSON:
 *   { formulario_id, paciente_id?, domicilio_id?, datos_prefilled:{...}, enviado_via? }
 *
 * Returns:
 *   { id, token, url, whatsapp_url, mensaje_wa }
 */
require_once __DIR__ . '/_helpers.php';
requireMethod('POST');

try {
    $datos = inputJson();

    if (empty($datos['formulario_id'])) jsonError('formulario_id es obligatorio');

    // Verificar que la plantilla existe
    $form = new Formulario();
    $plantilla = $form->obtener((int)$datos['formulario_id']);
    if (!$plantilla) jsonError('Formulario no encontrado', 404);

    // Pre-llenado: si viene paciente_id, auto-enriquecer con datos del paciente
    $prefilled = $datos['datos_prefilled'] ?? [];
    if (!empty($datos['paciente_id'])) {
        $pac = (new Paciente())->obtener((int)$datos['paciente_id']);
        if ($pac) {
            // Mapeo automático de campos estándar
            $prefilled['__paciente'] = [
                'id'              => $pac['id'],
                'nombre_completo' => $pac['nombre_completo'],
                'numero_documento'=> $pac['numero_documento'],
                'tipo_documento'  => $pac['tipo_documento'],
                'telefono'        => $pac['telefono'],
                'email'           => $pac['email']    ?? '',
                'fecha_nacimiento'=> $pac['fecha_nacimiento'] ?? '',
                'eps'             => $pac['eps']      ?? '',
                'direccion'       => $pac['direccion'] ?? '',
                'ciudad'          => $pac['ciudad']   ?? '',
            ];
        }
    }

    $datos['datos_prefilled'] = json_encode($prefilled, JSON_UNESCAPED_UNICODE);
    $datos['enviado_via']     = $datos['enviado_via'] ?? 'whatsapp';

    $envioId = $form->crearEnvio($datos, adminId());

    // Construir URL pública
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
    $host     = $_SERVER['HTTP_HOST'] ?? 'localhost';
    $base     = $protocol . '://' . $host;
    // Subir un nivel desde /api/lab/
    $basePath = rtrim(dirname(dirname(dirname($_SERVER['SCRIPT_NAME']))), '/');

    // Obtener el token del envío recién creado
    $db    = Database::getInstance();
    $envio = $db->fetch('SELECT token FROM lab_form_envios WHERE id = ?', [$envioId]);
    $token = $envio['token'];
    $url   = $base . $basePath . '/form_cliente.php?t=' . $token;

    // Mensaje de WhatsApp preformateado
    $nomPac    = $prefilled['__paciente']['nombre_completo'] ?? 'Estimado paciente';
    $nomForm   = $plantilla['nombre'];
    $mensajeWa = "Hola $nomPac, le enviamos el formulario *\"$nomForm\"* para que lo complete y firme digitalmente.\n\n"
               . "👉 Accede aquí:\n$url\n\n"
               . "Si tiene dudas contáctenos.";

    $telPac   = $prefilled['__paciente']['telefono'] ?? '';
    $waUrl    = 'https://wa.me/' . preg_replace('/\D/', '', $telPac)
              . '?text=' . rawurlencode($mensajeWa);

    jsonOk([
        'id'          => $envioId,
        'token'       => $token,
        'url'         => $url,
        'whatsapp_url'=> $waUrl,
        'mensaje_wa'  => $mensajeWa,
    ], 'Envío creado correctamente');

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