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

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

// Genera el siguiente número de caso del año actual, de forma atómica
// (usa el truco de MySQL LAST_INSERT_ID() en el UPDATE para que dos
// obras creadas al mismo tiempo nunca reciban el mismo número).
function generarNumeroCaso(PDO $pdo): string {
    $anio = (int)date('Y');
    // LAST_INSERT_ID(1) en el VALUES asegura que la sesión también quede
    // con el valor correcto la PRIMERA vez que se crea la fila del año
    // (sin este envoltorio, un INSERT nuevo no dispara LAST_INSERT_ID()
    // y el primer número del año queda en 0 en vez de 1).
    $pdo->prepare("
        INSERT INTO contador_casos (anio, ultimo_numero) VALUES (?, LAST_INSERT_ID(1))
        ON DUPLICATE KEY UPDATE ultimo_numero = LAST_INSERT_ID(ultimo_numero + 1)
    ")->execute([$anio]);
    $numero = (int)$pdo->query("SELECT LAST_INSERT_ID()")->fetchColumn();
    return sprintf('RE%d%08d', $anio, $numero);
}

// ── Crear obra ────────────────────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['accion'] ?? '') === 'crear_obra') {
    csrfValidarOMorir();
    if ($u['rol'] === 'revisor') {
        $error = 'El rol revisor no puede crear obras.';
    } else {
    $titulo = trim($_POST['titulo'] ?? '');
    $tipoObraId = (int)($_POST['tipo_obra_id'] ?? 0);

    if (!$titulo) {
        $error = 'El título de la obra es obligatorio.';
    } elseif (!$tipoObraId) {
        $error = 'Selecciona el tipo de obra.';
    } else {
        $numeroCaso = generarNumeroCaso($pdo);
        $codigoVerificacion = generarCodigoVerificacion($pdo);
        $stmt = $pdo->prepare("INSERT INTO obras (titulo, numero_caso, codigo_verificacion, tipo_obra_id, creado_por) VALUES (?, ?, ?, ?, ?)");
        $stmt->execute([$titulo, $numeroCaso, $codigoVerificacion, $tipoObraId, $u['id']]);
        header('Location: obra_detalle.php?id=' . $pdo->lastInsertId());
        exit;
    }
    }
}

// ── Editar obra (título + tipo) ─────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['accion'] ?? '') === 'editar_obra') {
    csrfValidarOMorir();
    $obraId = (int)($_POST['obra_id'] ?? 0);
    $titulo = trim($_POST['titulo'] ?? '');
    $tipoObraId = (int)($_POST['tipo_obra_id'] ?? 0);

    $stmt = $pdo->prepare("SELECT * FROM obras WHERE id = ?");
    $stmt->execute([$obraId]);
    $obraExistente = $stmt->fetch();

    if (!$obraExistente || ($obraExistente['creado_por'] != $u['id'] && $u['rol'] !== 'admin')) {
        $error = 'Obra no encontrada.';
    } elseif ($u['rol'] === 'revisor') {
        $error = 'El rol revisor no puede editar obras.';
    } elseif (!$titulo) {
        $error = 'El título de la obra es obligatorio.';
    } elseif (!$tipoObraId) {
        $error = 'Selecciona el tipo de obra.';
    } else {
        $pdo->prepare("UPDATE obras SET titulo = ?, tipo_obra_id = ? WHERE id = ?")
            ->execute([$titulo, $tipoObraId, $obraId]);
        $mensaje = 'Obra actualizada.';
    }
}

// ── Eliminar obra ────────────────────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['accion'] ?? '') === 'eliminar_obra') {
    csrfValidarOMorir();
    $obraId = (int)($_POST['obra_id'] ?? 0);

    $stmt = $pdo->prepare("SELECT * FROM obras WHERE id = ?");
    $stmt->execute([$obraId]);
    $obraExistente = $stmt->fetch();

    if (!$obraExistente || ($obraExistente['creado_por'] != $u['id'] && $u['rol'] !== 'admin')) {
        $error = 'Obra no encontrada.';
    } elseif ($u['rol'] === 'revisor') {
        $error = 'El rol revisor no puede eliminar obras.';
    } elseif ($obraExistente['estado'] === 'finalizado') {
        $error = 'No se puede eliminar una obra finalizada.';
    } else {
        $pdo->beginTransaction();
        try {
            $stmt = $pdo->prepare("
                SELECT archivo_path FROM documentos
                WHERE (entidad_tipo = 'obra' AND entidad_id = ?)
                   OR (entidad_tipo = 'relacion' AND entidad_id IN (SELECT id FROM obra_titulares WHERE obra_id = ?))
            ");
            $stmt->execute([$obraId, $obraId]);
            foreach ($stmt->fetchAll() as $d) {
                if ($d['archivo_path']) {
                    $ruta = __DIR__ . '/' . $d['archivo_path'];
                    if (is_file($ruta)) @unlink($ruta);
                }
            }

            $pdo->prepare("
                DELETE FROM documentos
                WHERE (entidad_tipo = 'obra' AND entidad_id = ?)
                   OR (entidad_tipo = 'relacion' AND entidad_id IN (SELECT id FROM obra_titulares WHERE obra_id = ?))
            ")->execute([$obraId, $obraId]);

            $pdo->prepare("DELETE FROM obra_titulares WHERE obra_id = ?")->execute([$obraId]);
            $pdo->prepare("DELETE FROM obras WHERE id = ?")->execute([$obraId]);

            $dirObra = __DIR__ . '/uploads/obras/' . $obraId;
            if (is_dir($dirObra)) @rmdir($dirObra);

            $pdo->commit();
            $mensaje = 'Obra eliminada.';
        } catch (Throwable $e) {
            $pdo->rollBack();
            throw $e;
        }
    }
}

// ── Catálogo de tipos de obra (para el select) ──────────────────
$tiposObra = $pdo->query("SELECT * FROM tipos_obra WHERE activo = 1 ORDER BY nombre")->fetchAll();

// ── Búsqueda + paginación ────────────────────────────────────────
$buscar = trim($_GET['buscar'] ?? '');
$pagina = max(1, (int)($_GET['pagina'] ?? 1));
$offset = ($pagina - 1) * OBRAS_POR_PAGINA;

$condiciones = [];
$parametros = [];

$verTodas = in_array($u['rol'], ['admin', 'revisor'], true);

if (!$buscar) {
    // sin filtro
} elseif ($verTodas) {
    $condiciones[] = "(o.titulo LIKE ? OR o.numero_caso LIKE ? OR us.nombre_completo LIKE ?)";
    $parametros[] = "%$buscar%";
    $parametros[] = "%$buscar%";
    $parametros[] = "%$buscar%";
} else {
    $condiciones[] = "(o.titulo LIKE ? OR o.numero_caso LIKE ?)";
    $parametros[] = "%$buscar%";
    $parametros[] = "%$buscar%";
}

if (!$verTodas) {
    $condiciones[] = "o.creado_por = ?";
    $parametros[] = $u['id'];
}

$whereSql = $condiciones ? ('WHERE ' . implode(' AND ', $condiciones)) : '';

$stmtTotal = $pdo->prepare("
    SELECT COUNT(*) FROM obras o JOIN usuarios us ON us.id = o.creado_por $whereSql
");
$stmtTotal->execute($parametros);
$totalObras = (int)$stmtTotal->fetchColumn();
$totalPaginas = max(1, (int)ceil($totalObras / OBRAS_POR_PAGINA));
$pagina = min($pagina, $totalPaginas);
$offset = ($pagina - 1) * OBRAS_POR_PAGINA;

$sql = "
    SELECT o.*, us.nombre_completo AS creador_nombre, tp.nombre AS tipo_obra_nombre,
        (SELECT COUNT(*) FROM obra_titulares WHERE obra_id = o.id) AS total_titulares
    FROM obras o
    JOIN usuarios us ON us.id = o.creado_por
    LEFT JOIN tipos_obra tp ON tp.id = o.tipo_obra_id
    $whereSql
    ORDER BY o.creado_en DESC
    LIMIT " . OBRAS_POR_PAGINA . " OFFSET $offset
";
$stmt = $pdo->prepare($sql);
$stmt->execute($parametros);
$obras = $stmt->fetchAll();

function urlPagina(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>Mis obras — 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"><?= match($u['rol']){'admin'=>'Administrador','revisor'=>'Revisor',default=>'Cargador'} ?></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">
    <div class="d-flex justify-content-between align-items-center mb-3">
        <h5 class="mb-0"><?= $verTodas ? 'Todas las obras' : 'Mis obras' ?></h5>
        <?php if ($u['rol'] !== 'revisor'): ?>
        <button class="btn btn-sm btn-sgc-primary" data-bs-toggle="modal" data-bs-target="#modalNuevaObra">
            <i class="bi bi-plus-lg"></i> Nueva obra
        </button>
        <?php endif; ?>
    </div>

    <?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; ?>

    <!-- Buscador -->
    <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 título, N.° de caso<?= $u['rol']==='admin' ? ' o cargador' : '' ?>…" value="<?= htmlspecialchars($buscar) ?>">
            <button type="submit" class="btn btn-outline-secondary">Buscar</button>
            <?php if ($buscar): ?><a href="obras.php" class="btn btn-outline-secondary"><i class="bi bi-x-lg"></i></a><?php endif; ?>
        </div>
    </form>

    <?php if (empty($obras)): ?>
        <div class="table-wrap-sgc">
            <div class="empty-state">
                <i class="bi bi-folder2"></i>
                <?= $buscar ? 'Ninguna obra coincide con tu búsqueda.' : 'Aún no hay obras registradas.' ?>
            </div>
        </div>
    <?php else: ?>
        <div class="table-wrap-sgc">
        <div class="table-responsive">
        <table class="table align-middle">
            <thead>
                <tr>
                    <th>N.° de caso</th>
                    <th>Título</th>
                    <th>Tipo</th>
                    <?php if ($verTodas): ?><th>Creada por</th><?php endif; ?>
                    <th>Titulares</th>
                    <th>Estado</th>
                    <th>Creada</th>
                    <th>Acciones</th>
                </tr>
            </thead>
            <tbody>
                <?php foreach ($obras as $o): ?>
                <tr>
                    <td class="text-muted" style="font-size:.82rem;font-family:monospace"><?= $o['numero_caso'] ? htmlspecialchars($o['numero_caso']) : '—' ?></td>
                    <td class="fw-semibold"><?= htmlspecialchars($o['titulo']) ?></td>
                    <td class="text-muted"><?= $o['tipo_obra_nombre'] ? htmlspecialchars($o['tipo_obra_nombre']) : '—' ?></td>
                    <?php if ($verTodas): ?><td class="text-muted"><?= htmlspecialchars($o['creador_nombre']) ?></td><?php endif; ?>
                    <td><?= (int)$o['total_titulares'] ?></td>
                    <td><span class="badge-estado-<?= $o['estado'] ?>"><?= ucfirst($o['estado']) ?></span></td>
                    <td class="text-muted"><?= date('d M Y', strtotime($o['creado_en'])) ?></td>
                    <td>
                        <div class="d-flex gap-1">
                            <a href="obra_detalle.php?id=<?= $o['id'] ?>" class="btn-accion"><i class="bi bi-eye"></i> Ver</a>
                            <?php if ($o['estado'] === 'borrador' && (($o['creado_por'] == $u['id'] || $u['rol'] === 'admin') && $u['rol'] !== 'revisor')): ?>
                            <button type="button" class="btn-accion"
                                onclick='abrirModalEditarObra(<?= json_encode([
                                    "obra_id" => $o["id"],
                                    "titulo" => $o["titulo"],
                                    "tipo_obra_id" => $o["tipo_obra_id"],
                                ], JSON_UNESCAPED_UNICODE | JSON_HEX_APOS) ?>)'>
                                <i class="bi bi-pencil"></i> Editar
                            </button>
                            <form method="post" onsubmit="return confirm('¿Eliminar la obra «<?= htmlspecialchars(addslashes($o['titulo'])) ?>»? Se borrarán sus titulares vinculados y documentos de la obra. Esta acción no se puede deshacer.');" class="d-inline">
                                <?= csrfCampoOculto() ?>
                                <input type="hidden" name="accion" value="eliminar_obra">
                                <input type="hidden" name="obra_id" value="<?= $o['id'] ?>">
                                <button type="submit" class="btn-accion peligro"><i class="bi bi-trash"></i> Eliminar</button>
                            </form>
                            <?php endif; ?>
                        </div>
                    </td>
                </tr>
                <?php endforeach; ?>
            </tbody>
        </table>
        </div>
        </div>

        <!-- Paginación -->
        <?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 ?> (<?= $totalObras ?> obra<?= $totalObras !== 1 ? 's' : '' ?>)
            </span>
            <div class="btn-group btn-group-sm">
                <a href="<?= urlPagina(max(1, $pagina - 1)) ?>" class="btn btn-outline-secondary pagina-btn <?= $pagina <= 1 ? 'disabled' : '' ?>">‹</a>
                <?php for ($p = 1; $p <= $totalPaginas; $p++): ?>
                    <a href="<?= urlPagina($p) ?>" class="btn <?= $p === $pagina ? 'btn-secondary' : 'btn-outline-secondary' ?> pagina-btn"><?= $p ?></a>
                <?php endfor; ?>
                <a href="<?= urlPagina(min($totalPaginas, $pagina + 1)) ?>" class="btn btn-outline-secondary pagina-btn <?= $pagina >= $totalPaginas ? 'disabled' : '' ?>">›</a>
            </div>
        </div>
        <?php endif; ?>
    <?php endif; ?>
</div>

<!-- Modal nueva obra -->
<div class="modal fade" id="modalNuevaObra" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <form method="post">
                <?= csrfCampoOculto() ?>
                <input type="hidden" name="accion" value="crear_obra">
                <div class="modal-header">
                    <h6 class="modal-title">Nueva obra</h6>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>
                <div class="modal-body">
                    <div class="mb-2">
                        <label class="form-label" style="font-size:.85rem">Título de la obra</label>
                        <input type="text" name="titulo" class="form-control" required autofocus>
                    </div>
                    <div>
                        <label class="form-label" style="font-size:.85rem">Tipo de obra</label>
                        <select name="tipo_obra_id" class="form-select" required>
                            <option value="">Selecciona…</option>
                            <?php foreach ($tiposObra as $t): ?>
                                <option value="<?= $t['id'] ?>"><?= htmlspecialchars($t['nombre']) ?></option>
                            <?php endforeach; ?>
                        </select>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="submit" class="btn btn-sgc-primary">Crear</button>
                </div>
            </form>
        </div>
    </div>
</div>

<!-- Modal editar obra -->
<div class="modal fade" id="modalEditarObra" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <form method="post">
                <?= csrfCampoOculto() ?>
                <input type="hidden" name="accion" value="editar_obra">
                <input type="hidden" name="obra_id" id="editObraId">
                <div class="modal-header">
                    <h6 class="modal-title">Editar obra</h6>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>
                <div class="modal-body">
                    <div class="mb-2">
                        <label class="form-label" style="font-size:.85rem">Título de la obra</label>
                        <input type="text" name="titulo" id="editObraTitulo" class="form-control" required>
                    </div>
                    <div>
                        <label class="form-label" style="font-size:.85rem">Tipo de obra</label>
                        <select name="tipo_obra_id" id="editObraTipo" class="form-select" required>
                            <option value="">Selecciona…</option>
                            <?php foreach ($tiposObra as $t): ?>
                                <option value="<?= $t['id'] ?>"><?= htmlspecialchars($t['nombre']) ?></option>
                            <?php endforeach; ?>
                        </select>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="submit" class="btn btn-sgc-primary">Guardar cambios</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>
function abrirModalEditarObra(datos) {
    document.getElementById('editObraId').value = datos.obra_id;
    document.getElementById('editObraTitulo').value = datos.titulo;
    document.getElementById('editObraTipo').value = datos.tipo_obra_id || '';
    new bootstrap.Modal(document.getElementById('modalEditarObra')).show();
}
</script>
</body>
</html>
