<?php
require_once __DIR__ . '/config.php';
require_once __DIR__ . '/lib_documentos.php';
$u = requerirRol(['revisor', 'admin']);
$pdo = db();

const REVISION_POR_PAGINA = 10;
$error = null;
$mensaje = null;

// ── Aprobar ──────────────────────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['accion'] ?? '') === 'aprobar_documento') {
    csrfValidarOMorir();
    $docId = (int)($_POST['documento_id'] ?? 0);

    $stmt = $pdo->prepare("SELECT * FROM documentos WHERE id = ? AND estado = 'pendiente_revision'");
    $stmt->execute([$docId]);
    $doc = $stmt->fetch();

    if (!$doc) {
        $error = 'Ese documento ya no está pendiente de revisión (puede que otro revisor ya lo haya gestionado).';
    } else {
        // Hash de integridad: se calcula justo al aprobar, sobre el
        // contenido real (archivo o texto). Si el archivo se reemplaza
        // después, este hash queda como evidencia de qué era exactamente
        // lo que el revisor aprobó en su momento.
        if ($doc['tipo_carga'] === 'archivo' && $doc['archivo_path']) {
            $ruta = __DIR__ . '/' . $doc['archivo_path'];
            $hash = is_file($ruta) ? hash_file('sha256', $ruta) : null;
        } else {
            $hash = hash('sha256', $doc['contenido_texto'] ?? '');
        }

        $pdo->prepare("
            UPDATE documentos SET estado = 'aprobado', revisado_por = ?, fecha_revision = NOW(),
                motivo_rechazo = NULL, hash_integridad = ?
            WHERE id = ?
        ")->execute([$u['id'], $hash, $docId]);
        $mensaje = 'Documento aprobado.';
    }
}

// ── Rechazar ─────────────────────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['accion'] ?? '') === 'rechazar_documento') {
    csrfValidarOMorir();
    $docId = (int)($_POST['documento_id'] ?? 0);
    $motivo = trim($_POST['motivo_rechazo'] ?? '');

    $stmt = $pdo->prepare("SELECT * FROM documentos WHERE id = ? AND estado = 'pendiente_revision'");
    $stmt->execute([$docId]);
    $doc = $stmt->fetch();

    if (!$doc) {
        $error = 'Ese documento ya no está pendiente de revisión (puede que otro revisor ya lo haya gestionado).';
    } elseif (!$motivo) {
        $error = 'Debes indicar el motivo del rechazo.';
    } else {
        $pdo->prepare("
            UPDATE documentos SET estado = 'rechazado', revisado_por = ?, fecha_revision = NOW(), motivo_rechazo = ?
            WHERE id = ?
        ")->execute([$u['id'], $motivo, $docId]);

        $stmtDr = $pdo->prepare("SELECT nombre FROM documentos_requeridos WHERE id = ?");
        $stmtDr->execute([$doc['documento_requerido_id']]);
        $nombreDr = $stmtDr->fetchColumn();

        $stmtCargador = $pdo->prepare("SELECT correo FROM usuarios WHERE id = ?");
        $stmtCargador->execute([$doc['cargado_por']]);
        $correoCargador = $stmtCargador->fetchColumn();

        enviarCorreoSistema(
            $correoCargador,
            "Documento rechazado — $nombreDr",
            "Tu documento \"$nombreDr\" fue rechazado por el revisor.\n\nMotivo: $motivo\n\n" .
            "Ingresa al sistema para corregirlo y volver a cargarlo."
        );

        $mensaje = 'Documento rechazado.';
    }
}

// ── Búsqueda + paginación de la cola ───────────────────────────
$buscar = trim($_GET['buscar'] ?? '');
$pagina = max(1, (int)($_GET['pagina'] ?? 1));

$condiciones = ["d.estado = 'pendiente_revision'"];
$parametros = [];
if ($buscar) {
    $condiciones[] = "(o_directa.titulo LIKE ? OR o_directa.numero_caso LIKE ? OR dr.nombre LIKE ?)";
    $parametros[] = "%$buscar%";
    $parametros[] = "%$buscar%";
    $parametros[] = "%$buscar%";
}
$whereSql = 'WHERE ' . implode(' AND ', $condiciones);

// o_directa solo cubre entidad_tipo='obra' — para titular/relación el
// filtro de búsqueda por obra no aplica tan directo, así que si buscan
// texto y el documento es de otro tipo, simplemente no matcheará por
// título/caso (sí seguirá matcheando por nombre de documento).
$sqlBase = "
    FROM documentos d
    JOIN documentos_requeridos dr ON dr.id = d.documento_requerido_id
    JOIN usuarios uc ON uc.id = d.cargado_por
    LEFT JOIN obras o_directa ON d.entidad_tipo = 'obra' AND o_directa.id = d.entidad_id
    $whereSql
";

$stmtTotal = $pdo->prepare("SELECT COUNT(*) $sqlBase");
$stmtTotal->execute($parametros);
$total = (int)$stmtTotal->fetchColumn();
$totalPaginas = max(1, (int)ceil($total / REVISION_POR_PAGINA));
$pagina = min($pagina, $totalPaginas);
$offset = ($pagina - 1) * REVISION_POR_PAGINA;

$stmt = $pdo->prepare("
    SELECT d.*, dr.nombre AS documento_nombre, uc.nombre_completo AS cargado_por_nombre
    $sqlBase
    ORDER BY d.fecha_carga ASC
    LIMIT " . REVISION_POR_PAGINA . " OFFSET $offset
");
$stmt->execute($parametros);
$documentos = $stmt->fetchAll();

// Enriquecer cada fila con su contexto (obra/etiqueta)
foreach ($documentos as &$d) {
    $d['contexto'] = contextoDocumento($pdo, $d);
}
unset($d);

function urlPaginaRevisor(int $p): string {
    $params = $_GET;
    $params['pagina'] = $p;
    return '?' . http_build_query($params);
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cola de revisión — Fondo Documental SGC</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
<link href="estilos.css" rel="stylesheet">
</head>
<body>
<div class="header">
    <strong><i class="bi bi-music-note-beamed me-1"></i> Fondo documental SGC</strong>
    <div class="d-flex align-items-center gap-3">
        <span class="badge-rol"><?= $u['rol'] === 'admin' ? 'Administrador' : 'Revisor' ?></span>
        <span style="font-size:.85rem"><?= htmlspecialchars($u['nombre']) ?></span>
        <a href="logout.php" class="btn btn-sm btn-outline-light">Salir</a>
    </div>
</div>

<div class="container py-4">
    <h5 class="mb-3">Cola de revisión</h5>

    <?php if ($error): ?>
        <div class="alert alert-danger py-2"><i class="bi bi-exclamation-circle me-1"></i> <?= htmlspecialchars($error) ?></div>
    <?php endif; ?>
    <?php if ($mensaje): ?>
        <div class="alert alert-success py-2"><i class="bi bi-check-circle me-1"></i> <?= htmlspecialchars($mensaje) ?></div>
    <?php endif; ?>

    <form method="get" class="mb-3">
        <div class="input-group input-group-sm buscador-sgc">
            <span class="input-group-text bg-white" style="border-color:#d0d5dd;border-right:none"><i class="bi bi-search text-muted"></i></span>
            <input type="text" name="buscar" class="form-control" style="border-left:none" placeholder="Buscar por obra, N.° de caso o documento…" value="<?= htmlspecialchars($buscar) ?>">
            <button type="submit" class="btn btn-outline-secondary">Buscar</button>
            <?php if ($buscar): ?><a href="revisor.php" class="btn btn-outline-secondary"><i class="bi bi-x-lg"></i></a><?php endif; ?>
        </div>
    </form>

    <?php if (empty($documentos)): ?>
        <div class="table-wrap-sgc">
            <div class="empty-state">
                <i class="bi bi-check2-circle"></i>
                <?= $buscar ? 'Ninguna coincidencia en la cola de revisión.' : 'No hay documentos pendientes de revisión. ¡Al día!' ?>
            </div>
        </div>
    <?php else: ?>
        <div class="table-wrap-sgc">
        <div class="table-responsive">
        <table class="table align-middle">
            <thead>
                <tr>
                    <th>Obra</th>
                    <th>Para</th>
                    <th>Documento</th>
                    <th>Contenido</th>
                    <th>Cargado por</th>
                    <th>Fecha</th>
                    <th>Acciones</th>
                </tr>
            </thead>
            <tbody>
                <?php foreach ($documentos as $d): $ctx = $d['contexto']; ?>
                <tr>
                    <td>
                        <?php if ($ctx['obra_id']): ?>
                            <a href="obra_detalle.php?id=<?= $ctx['obra_id'] ?>" class="fw-semibold text-decoration-none"><?= htmlspecialchars($ctx['obra_titulo']) ?></a>
                        <?php else: ?>
                            <span class="fw-semibold"><?= htmlspecialchars($ctx['obra_titulo']) ?></span>
                        <?php endif; ?>
                        <?php if ($ctx['numero_caso']): ?>
                            <br><span class="text-muted" style="font-size:.72rem;font-family:monospace"><?= htmlspecialchars($ctx['numero_caso']) ?></span>
                        <?php endif; ?>
                    </td>
                    <td class="text-muted"><?= $ctx['etiqueta'] ? htmlspecialchars($ctx['etiqueta']) : '—' ?></td>
                    <td><?= htmlspecialchars($d['documento_nombre']) ?></td>
                    <td class="text-muted"><?= $d['tipo_carga'] === 'archivo' ? htmlspecialchars($d['archivo_nombre_original']) : '(texto pegado)' ?></td>
                    <td class="text-muted"><?= htmlspecialchars($d['cargado_por_nombre']) ?></td>
                    <td class="text-muted"><?= date('d M Y', strtotime($d['fecha_carga'])) ?></td>
                    <td>
                        <div class="d-flex gap-1">
                            <button type="button" class="btn-accion"
                                onclick='abrirModalVerDocumento(<?= json_encode([
                                    "nombre" => $d["documento_nombre"],
                                    "tipo_carga" => $d["tipo_carga"],
                                    "contenido_texto" => $d["contenido_texto"],
                                    "documento_id" => $d["id"],
                                    "archivo_nombre_original" => $d["archivo_nombre_original"],
                                ], JSON_UNESCAPED_UNICODE | JSON_HEX_APOS) ?>)'>
                                <i class="bi bi-eye"></i> Ver
                            </button>
                            <form method="post" class="d-inline" onsubmit="return confirm('¿Aprobar este documento?');">
                                <?= csrfCampoOculto() ?>
                                <input type="hidden" name="accion" value="aprobar_documento">
                                <input type="hidden" name="documento_id" value="<?= $d['id'] ?>">
                                <button type="submit" class="btn-accion" style="color:#146c43;border-color:#b6e4cd"><i class="bi bi-check-lg"></i> Aprobar</button>
                            </form>
                            <button type="button" class="btn-accion peligro"
                                onclick="abrirModalRechazar(<?= $d['id'] ?>, '<?= htmlspecialchars(addslashes($d['documento_nombre'])) ?>')">
                                <i class="bi bi-x-lg"></i> Rechazar
                            </button>
                        </div>
                    </td>
                </tr>
                <?php endforeach; ?>
            </tbody>
        </table>
        </div>
        </div>

        <?php if ($totalPaginas > 1): ?>
        <div class="d-flex justify-content-between align-items-center mt-3">
            <span class="text-muted" style="font-size:.8rem">
                Página <?= $pagina ?> de <?= $totalPaginas ?> (<?= $total ?> documento<?= $total !== 1 ? 's' : '' ?> pendientes)
            </span>
            <div class="btn-group btn-group-sm">
                <a href="<?= urlPaginaRevisor(max(1, $pagina - 1)) ?>" class="btn btn-outline-secondary pagina-btn <?= $pagina <= 1 ? 'disabled' : '' ?>">‹</a>
                <?php for ($p = 1; $p <= $totalPaginas; $p++): ?>
                    <a href="<?= urlPaginaRevisor($p) ?>" class="btn <?= $p === $pagina ? 'btn-secondary' : 'btn-outline-secondary' ?> pagina-btn"><?= $p ?></a>
                <?php endfor; ?>
                <a href="<?= urlPaginaRevisor(min($totalPaginas, $pagina + 1)) ?>" class="btn btn-outline-secondary pagina-btn <?= $pagina >= $totalPaginas ? 'disabled' : '' ?>">›</a>
            </div>
        </div>
        <?php endif; ?>
    <?php endif; ?>
</div>

<!-- Modal ver documento (mismo patrón que obra_detalle.php) -->
<div class="modal fade" id="modalVerDocumento" tabindex="-1">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <h6 class="modal-title" id="verDocumentoTitulo">Documento</h6>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body" id="verDocumentoCuerpo" style="max-height:70vh;overflow:auto"></div>
        </div>
    </div>
</div>

<!-- Modal rechazar (pide motivo) -->
<div class="modal fade" id="modalRechazar" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <form method="post">
                <?= csrfCampoOculto() ?>
                <input type="hidden" name="accion" value="rechazar_documento">
                <input type="hidden" name="documento_id" id="rechazarDocumentoId">
                <div class="modal-header">
                    <h6 class="modal-title" id="rechazarTitulo">Rechazar documento</h6>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>
                <div class="modal-body">
                    <label class="form-label">Motivo del rechazo</label>
                    <textarea name="motivo_rechazo" class="form-control" rows="3" required placeholder="Explica qué debe corregir el cargador…"></textarea>
                </div>
                <div class="modal-footer">
                    <button type="submit" class="btn btn-sm btn-outline-danger">Rechazar</button>
                </div>
            </form>
        </div>
    </div>
</div>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script>
const EXTENSIONES_PREVIEW_IMG = ['jpg','jpeg','png','gif','webp'];

function abrirModalVerDocumento(datos) {
    document.getElementById('verDocumentoTitulo').textContent = datos.nombre;
    const cuerpo = document.getElementById('verDocumentoCuerpo');

    if (datos.tipo_carga === 'texto') {
        cuerpo.innerHTML = '<pre style="white-space:pre-wrap;font-size:.85rem;margin:0">' +
            (datos.contenido_texto || '').replace(/</g, '&lt;') + '</pre>';
    } else {
        const ext = (datos.archivo_nombre_original || '').split('.').pop().toLowerCase();
        const url = 'ver_archivo.php?id=' + encodeURIComponent(datos.documento_id);
        let html = '<p class="mb-2" style="font-size:.85rem">' + datos.archivo_nombre_original + '</p>';
        if (EXTENSIONES_PREVIEW_IMG.includes(ext)) {
            html += '<img src="' + url + '" style="max-width:100%;border-radius:8px" alt="' + datos.archivo_nombre_original + '">';
        } else if (ext === 'pdf') {
            html += '<iframe src="' + url + '" style="width:100%;height:60vh;border:1px solid #e2e2e2;border-radius:8px"></iframe>';
        } else if (['mp3','wav','ogg'].includes(ext)) {
            html += '<audio controls style="width:100%" src="' + url + '"></audio>';
        } else {
            html += '<p class="text-muted" style="font-size:.8rem">Este tipo de archivo no se puede previsualizar aquí.</p>';
        }
        html += '<a href="' + url + '" target="_blank" class="btn btn-sm btn-outline-secondary mt-2">Abrir en pestaña nueva / Descargar</a>';
        cuerpo.innerHTML = html;
    }
    new bootstrap.Modal(document.getElementById('modalVerDocumento')).show();
}

function abrirModalRechazar(documentoId, nombre) {
    document.getElementById('rechazarDocumentoId').value = documentoId;
    document.getElementById('rechazarTitulo').textContent = 'Rechazar: ' + nombre;
    new bootstrap.Modal(document.getElementById('modalRechazar')).show();
}
</script>
</body>
</html>
