<?php
/**
 * POST/GET /modules/turnero/api/comentarios.php
 *
 * GET:  obtener comentarios de un turno
 *   ?turno_id=X&incluir_examenes=1&incluir_consentimientos=1
 *
 * POST: guardar comentario
 *   { turno_id, comentario, tipo: 'recepcion|muestras|general' }
 */

require_once __DIR__ . '/_helpers.php';
requireTurnero();

$pdo = db();
$userId = (int)adminId();
$userName = $_SESSION['admin_user']['full_name']
         ?? $_SESSION['admin_user']['username']
         ?? 'Usuario';

// ── GET: Obtener comentarios y datos relacionados ──
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    $turnoId = (int)($_GET['turno_id'] ?? 0);
    if ($turnoId <= 0) jsonError('turno_id requerido.');

    $datos = [];

    // Comentarios del turno
    $stmtCom = $pdo->prepare(
        "SELECT id, usuario_nombre, comentario, tipo, creado_at
           FROM turnero_comentarios
          WHERE turno_id = ?
          ORDER BY creado_at DESC"
    );
    $stmtCom->execute([$turnoId]);
    $datos['comentarios'] = $stmtCom->fetchAll(PDO::FETCH_ASSOC);

    // Exámenes solicitados (si lo pide)
    if (!empty($_GET['incluir_examenes'])) {
        $stmtExam = $pdo->prepare(
            "SELECT DISTINCT et.nombre, et.codigo
               FROM turnero_examen_items tei
               JOIN exam_tipos et ON et.id = tei.exam_tipo_id
               WHERE tei.solicitud_id = (
                   SELECT id FROM turnero_solicitudes
                   WHERE turno_id = ? LIMIT 1
               )
               ORDER BY et.nombre ASC"
        );
        $stmtExam->execute([$turnoId]);
        $datos['examenes'] = $stmtExam->fetchAll(PDO::FETCH_ASSOC);
    }

    // Consentimientos (si lo pide)
    if (!empty($_GET['incluir_consentimientos'])) {
        $stmtCons = $pdo->prepare(
            "SELECT tc.id, f.nombre, tc.estado, tc.firmado_at, tc.firma_profesional_svg
               FROM turnero_consentimientos tc
               LEFT JOIN lab_formularios f ON f.id = tc.formulario_id
              WHERE tc.turno_id = ?
              ORDER BY tc.estado DESC, tc.firmado_at DESC"
        );
        $stmtCons->execute([$turnoId]);
        $datos['consentimientos'] = $stmtCons->fetchAll(PDO::FETCH_ASSOC);
    }

    jsonOk($datos);
}

// ── POST: Guardar comentario ──
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $datos = inputJson();
    $turnoId = (int)($datos['turno_id'] ?? 0);
    $comentario = trim($datos['comentario'] ?? '');
    $tipo = $datos['tipo'] ?? 'general';

    if ($turnoId <= 0) jsonError('turno_id requerido.');
    if (!$comentario) jsonError('Comentario vacío.');
    if (!in_array($tipo, ['recepcion','muestras','general'], true)) $tipo = 'general';

    // Validar que el turno existe
    $stmtTurno = $pdo->prepare("SELECT id FROM turnero_turnos WHERE id = ?");
    $stmtTurno->execute([$turnoId]);
    if (!$stmtTurno->fetch()) jsonError('Turno no encontrado.', 404);

    // Guardar comentario
    $stmtIns = $pdo->prepare(
        "INSERT INTO turnero_comentarios (turno_id, usuario_id, usuario_nombre, comentario, tipo)
         VALUES (?, ?, ?, ?, ?)"
    );
    $stmtIns->execute([$turnoId, $userId, $userName, $comentario, $tipo]);
    $comId = (int)$pdo->lastInsertId();

    jsonOk(['id' => $comId, 'creado_at' => date('c')]);
}
