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

$obraId = (int)($_GET['id'] ?? 0);
$pdo = db();

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

// Cargador: solo sus propias obras. Admin y revisor: cualquier obra
// (el revisor necesita ver el contexto completo para aprobar/rechazar
// y dejar notas de reparto, aunque no pueda editar nada).
$esPropia = $obra && $obra['creado_por'] == $u['id'];
if (!$obra || (!$esPropia && !in_array($u['rol'], ['admin', 'revisor'], true))) {
    http_response_code(404);
    die('Obra no encontrada.');
}

// El revisor tiene acceso de SOLO LECTURA aquí (más la posibilidad de
// dejar notas de reparto) — no puede agregar/editar/eliminar titulares
// ni documentos. Esas acciones siguen siendo de cargador/admin.
$puedeEditar = in_array($u['rol'], ['cargador', 'admin'], true);

// Una vez finalizada, NADIE puede modificar archivos/titulares — la
// única excepción es que un admin elimine un documento puntual dejando
// motivo (ver más abajo, acción eliminar_documento).
$obraEditable = $puedeEditar && $obra['estado'] === 'borrador';

$error = null;
$mensaje = null;
const MAX_ARCHIVO_BYTES = 5 * 1024 * 1024; // 5 MB
$DIR_UPLOADS = __DIR__ . '/uploads/obras/' . $obraId;

// ── Acciones POST ────────────────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    csrfValidarOMorir();
    $accion = $_POST['accion'] ?? '';

    // Estas acciones SIEMPRE requieren que la obra esté en borrador y
    // que quien la pida sea cargador/admin — esto se verifica aquí en
    // el servidor, no solo ocultando el botón en el HTML (que alguien
    // podría saltarse enviando el POST directo).
    $accionesQueRequierenBorrador = ['agregar_titular','editar_titular','eliminar_titular','cargar_documento','editar_documento','finalizar'];

    if (in_array($accion, $accionesQueRequierenBorrador, true) && !$obraEditable) {
        $error = 'Esta obra ya no se puede modificar (está finalizada o no tienes permiso de edición).';
    }

    // -- Agregar titular a la obra --
    elseif ($accion === 'agregar_titular') {
        $tipoPersona = $_POST['tipo_persona'] ?? '';
        $nombres     = trim($_POST['nombres_completos'] ?? '');
        $ident       = trim($_POST['identificacion'] ?? '');
        $correo      = trim($_POST['correo'] ?? '') ?: null;
        $celular     = trim($_POST['celular'] ?? '') ?: null;
        $rol         = $_POST['rol'] ?? '';
        $porcentaje  = $_POST['porcentaje_reparto'] !== '' ? (float)$_POST['porcentaje_reparto'] : null;
        $causahabiente = !empty($_POST['es_causahabiente']) ? 1 : 0;

        $rolesValidos = ['autor','compositor','interprete','ejecutante','productor_fonografico','editor','arreglista'];

        if (!in_array($tipoPersona, ['natural','juridica'], true) || !$nombres || !$ident || !in_array($rol, $rolesValidos, true)) {
            $error = 'Completa tipo de persona, nombres, identificación y rol correctamente.';
        } elseif ($porcentaje !== null && $porcentaje < 0) {
            $error = 'El porcentaje de reparto no puede ser negativo.';
        } else {
            // La suma de porcentaje_reparto de TODOS los titulares/roles de
            // esta obra no puede superar 100%. Se valida ANTES de insertar,
            // no solo se advierte después.
            if ($porcentaje !== null) {
                $stmt = $pdo->prepare("SELECT COALESCE(SUM(porcentaje_reparto), 0) FROM obra_titulares WHERE obra_id = ?");
                $stmt->execute([$obraId]);
                $sumaActual = (float)$stmt->fetchColumn();

                if ($sumaActual + $porcentaje > 100.0001) {
                    $disponible = max(0, 100 - $sumaActual);
                    $error = sprintf(
                        'La suma de reparto no puede superar 100%%. Ya hay %.2f%% asignado — disponible: %.2f%%.',
                        $sumaActual, $disponible
                    );
                }
            }
        }

        if (!$error) {
            // Reutilizar titular existente por identificación, o crear uno nuevo.
            $stmt = $pdo->prepare("SELECT id FROM titulares WHERE identificacion = ?");
            $stmt->execute([$ident]);
            $titularId = $stmt->fetchColumn();

            if (!$titularId) {
                $pdo->prepare("
                    INSERT INTO titulares (tipo_persona, nombres_completos, identificacion, correo, celular, es_causahabiente)
                    VALUES (?, ?, ?, ?, ?, ?)
                ")->execute([$tipoPersona, $nombres, $ident, $correo, $celular, $causahabiente]);
                $titularId = (int)$pdo->lastInsertId();
            }

            try {
                $pdo->prepare("
                    INSERT INTO obra_titulares (obra_id, titular_id, rol, porcentaje_reparto)
                    VALUES (?, ?, ?, ?)
                ")->execute([$obraId, $titularId, $rol, $porcentaje]);
                $mensaje = 'Titular agregado a la obra.';
            } catch (PDOException $e) {
                if ($e->getCode() === '23000') {
                    $error = 'Ese titular ya tiene ese mismo rol asignado en esta obra.';
                } else {
                    throw $e;
                }
            }
        }
    }

    // -- Editar titular ya vinculado a la obra --
    elseif ($accion === 'editar_titular') {
        $otId = (int)($_POST['obra_titular_id'] ?? 0);
        $stmt = $pdo->prepare("SELECT * FROM obra_titulares WHERE id = ? AND obra_id = ?");
        $stmt->execute([$otId, $obraId]);
        $otExistente = $stmt->fetch();

        $tipoPersona = $_POST['tipo_persona'] ?? '';
        $nombres     = trim($_POST['nombres_completos'] ?? '');
        $ident       = trim($_POST['identificacion'] ?? '');
        $correo      = trim($_POST['correo'] ?? '') ?: null;
        $celular     = trim($_POST['celular'] ?? '') ?: null;
        $rol         = $_POST['rol'] ?? '';
        $porcentaje  = $_POST['porcentaje_reparto'] !== '' ? (float)$_POST['porcentaje_reparto'] : null;
        $causahabiente = !empty($_POST['es_causahabiente']) ? 1 : 0;
        $rolesValidos = ['autor','compositor','interprete','ejecutante','productor_fonografico','editor','arreglista'];

        if (!$otExistente) {
            $error = 'Ese titular no pertenece a esta obra.';
        } elseif (!in_array($tipoPersona, ['natural','juridica'], true) || !$nombres || !$ident || !in_array($rol, $rolesValidos, true)) {
            $error = 'Completa tipo de persona, nombres, identificación y rol correctamente.';
        } elseif ($porcentaje !== null && $porcentaje < 0) {
            $error = 'El porcentaje de reparto no puede ser negativo.';
        } else {
            // Suma de reparto de la obra SIN contar este registro (que se
            // va a reemplazar), igual que al agregar.
            if ($porcentaje !== null) {
                $stmt = $pdo->prepare("SELECT COALESCE(SUM(porcentaje_reparto), 0) FROM obra_titulares WHERE obra_id = ? AND id != ?");
                $stmt->execute([$obraId, $otId]);
                $sumaOtros = (float)$stmt->fetchColumn();
                if ($sumaOtros + $porcentaje > 100.0001) {
                    $disponible = max(0, 100 - $sumaOtros);
                    $error = sprintf(
                        'La suma de reparto no puede superar 100%%. Sin contar este registro ya hay %.2f%% asignado — disponible: %.2f%%.',
                        $sumaOtros, $disponible
                    );
                }
            }

            if (!$error) {
                try {
                    $pdo->beginTransaction();
                    $pdo->prepare("
                        UPDATE titulares SET tipo_persona=?, nombres_completos=?, identificacion=?, correo=?, celular=?, es_causahabiente=?
                        WHERE id = ?
                    ")->execute([$tipoPersona, $nombres, $ident, $correo, $celular, $causahabiente, $otExistente['titular_id']]);

                    $pdo->prepare("UPDATE obra_titulares SET rol = ?, porcentaje_reparto = ? WHERE id = ?")
                        ->execute([$rol, $porcentaje, $otId]);

                    $pdo->commit();
                    $mensaje = 'Titular actualizado.';
                } catch (PDOException $e) {
                    $pdo->rollBack();
                    if ($e->getCode() === '23000') {
                        $error = str_contains($e->getMessage(), 'uq_titulares_identificacion')
                            ? 'Ya existe otro titular registrado con esa identificación.'
                            : 'Ese titular ya tiene ese mismo rol asignado en esta obra.';
                    } else {
                        throw $e;
                    }
                }
            }
        }
    }

    // -- Eliminar titular de la obra --
    elseif ($accion === 'eliminar_titular') {
        $otId = (int)($_POST['obra_titular_id'] ?? 0);
        $stmt = $pdo->prepare("SELECT * FROM obra_titulares WHERE id = ? AND obra_id = ?");
        $stmt->execute([$otId, $obraId]);
        $otExistente = $stmt->fetch();

        if (!$otExistente) {
            $error = 'Ese titular no pertenece a esta obra.';
        } else {
            // Los documentos cargados a nivel de RELACIÓN (ej. contrato de
            // edición específico de este rol en esta obra) dejan de tener
            // sentido si se quita la relación — se eliminan junto con sus
            // archivos físicos. Los documentos a nivel de TITULAR (ej. RUT,
            // formulario de ingreso) NO se tocan: son datos de la persona,
            // no de esta obra puntual, y pueden seguir vigentes en otras obras.
            $pdo->beginTransaction();
            try {
                $stmtDocs = $pdo->prepare("SELECT archivo_path FROM documentos WHERE entidad_tipo = 'relacion' AND entidad_id = ?");
                $stmtDocs->execute([$otId]);
                foreach ($stmtDocs->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 = 'relacion' AND entidad_id = ?")->execute([$otId]);
                $pdo->prepare("DELETE FROM obra_titulares WHERE id = ?")->execute([$otId]);
                $pdo->commit();
                $mensaje = 'Titular eliminado de la obra (y sus documentos de esa relación).';
            } catch (Throwable $e) {
                $pdo->rollBack();
                throw $e;
            }
        }
    }

    // -- Editar documento ya cargado (reemplazar archivo/texto) --
    elseif ($accion === 'editar_documento') {
        $docId = (int)($_POST['documento_id'] ?? 0);
        $doc = documentoPerteneceAObra($pdo, $docId, $obraId);
        $tipoCarga = $_POST['tipo_carga'] ?? '';

        if (!$doc) {
            $error = 'Ese documento no pertenece a esta obra.';
        } elseif (!in_array($tipoCarga, ['archivo','texto'], true)) {
            $error = 'Selecciona cómo quieres reemplazar el documento.';
        } else {
            $stmtDr = $pdo->prepare("SELECT * FROM documentos_requeridos WHERE id = ?");
            $stmtDr->execute([$doc['documento_requerido_id']]);
            $dr = $stmtDr->fetch();
            // Editar el contenido implica que hay que revisarlo de nuevo si
            // ese tipo de documento requiere revisión — no puede quedar
            // "aprobado" con un archivo distinto al que aprobó el revisor.
            $estadoNuevo = $dr['requiere_revision'] ? 'pendiente_revision' : 'cumplido';

            if ($tipoCarga === 'texto') {
                $contenido = trim($_POST['contenido_texto'] ?? '');
                if (!$contenido) {
                    $error = 'Pega el contenido en el cuadro de texto.';
                } else {
                    if ($doc['archivo_path']) {
                        $ruta = __DIR__ . '/' . $doc['archivo_path'];
                        if (is_file($ruta)) @unlink($ruta);
                    }
                    $pdo->prepare("
                        UPDATE documentos SET tipo_carga='texto', contenido_texto=?, archivo_path=NULL,
                            archivo_nombre_original=NULL, archivo_peso_bytes=NULL, estado=?,
                            motivo_rechazo=NULL, revisado_por=NULL, fecha_revision=NULL
                        WHERE id = ?
                    ")->execute([$contenido, $estadoNuevo, $docId]);
                    $mensaje = 'Documento actualizado.';
                }
            } else {
                if (empty($_FILES['archivo']['name'])) {
                    $error = 'Selecciona un archivo.';
                } elseif ($_FILES['archivo']['error'] !== UPLOAD_ERR_OK) {
                    $error = 'Error subiendo el archivo (código ' . $_FILES['archivo']['error'] . ').';
                } elseif ($_FILES['archivo']['size'] > MAX_ARCHIVO_BYTES) {
                    $error = 'El archivo supera el máximo de 5 MB.';
                } else {
                    if (!is_dir($DIR_UPLOADS)) mkdir($DIR_UPLOADS, 0755, true);
                    $nombreOriginal = basename($_FILES['archivo']['name']);
                    $nombreGuardado = uniqid('doc_', true) . '_' . preg_replace('/[^A-Za-z0-9_.-]/', '_', $nombreOriginal);
                    $destino = $DIR_UPLOADS . '/' . $nombreGuardado;

                    if (!move_uploaded_file($_FILES['archivo']['tmp_name'], $destino)) {
                        $error = 'No se pudo guardar el archivo en el servidor.';
                    } else {
                        if ($doc['archivo_path']) {
                            $rutaVieja = __DIR__ . '/' . $doc['archivo_path'];
                            if (is_file($rutaVieja)) @unlink($rutaVieja);
                        }
                        $rutaRelativa = 'uploads/obras/' . $obraId . '/' . $nombreGuardado;
                        $pdo->prepare("
                            UPDATE documentos SET tipo_carga='archivo', archivo_path=?, archivo_nombre_original=?,
                                archivo_peso_bytes=?, contenido_texto=NULL, estado=?,
                                motivo_rechazo=NULL, revisado_por=NULL, fecha_revision=NULL
                            WHERE id = ?
                        ")->execute([$rutaRelativa, $nombreOriginal, $_FILES['archivo']['size'], $estadoNuevo, $docId]);
                        $mensaje = 'Documento actualizado.';
                    }
                }
            }
        }
    }

    // -- Eliminar documento ya cargado --
    elseif ($accion === 'eliminar_documento') {
        $docId = (int)($_POST['documento_id'] ?? 0);
        $doc = documentoPerteneceAObra($pdo, $docId, $obraId);

        if (!$doc) {
            $error = 'Ese documento no pertenece a esta obra.';
        } elseif ($obra['estado'] === 'finalizado' && $u['rol'] !== 'admin') {
            // La obra ya está cerrada: solo un admin puede tocar algo
            // aquí, y solo dejando constancia del motivo.
            $error = 'Esta obra está finalizada — solo un administrador puede eliminar documentos, y debe indicar un motivo.';
        } elseif ($obra['estado'] === 'finalizado' && $u['rol'] === 'admin' && trim($_POST['motivo_eliminacion'] ?? '') === '') {
            $error = 'Debes indicar el motivo para eliminar un documento de una obra ya finalizada.';
        } else {
            // Si la obra está finalizada, este borrado SIEMPRE es un admin
            // con motivo — se registra en auditoría ANTES de borrar nada,
            // y se notifica a todos los interesados por transparencia.
            if ($obra['estado'] === 'finalizado') {
                $stmtDr = $pdo->prepare("SELECT nombre FROM documentos_requeridos WHERE id = ?");
                $stmtDr->execute([$doc['documento_requerido_id']]);
                $nombreDr = $stmtDr->fetchColumn();

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

                $motivo = trim($_POST['motivo_eliminacion']);

                $pdo->prepare("
                    INSERT INTO eliminaciones_documento_finalizado
                        (obra_id, documento_requerido_nombre, entidad_tipo, entidad_id,
                         archivo_nombre_original, cargado_por_nombre, fecha_carga_original,
                         eliminado_por, motivo)
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
                ")->execute([
                    $obraId, $nombreDr, $doc['entidad_tipo'], $doc['entidad_id'],
                    $doc['archivo_nombre_original'], $nombreCargador, $doc['fecha_carga'],
                    $u['id'], $motivo,
                ]);

                $asunto = "Eliminación de documento — {$obra['titulo']} ({$obra['numero_caso']})";
                $cuerpo = "Se eliminó el documento \"$nombreDr\" de la obra \"{$obra['titulo']}\" " .
                          "(finalizada), por decisión administrativa.\n\n" .
                          "Motivo indicado: $motivo\n\n" .
                          "Este mensaje se envía a todos los interesados de la obra por transparencia.";
                foreach (correosInteresadosObra($pdo, $obraId) as $correoDestino) {
                    enviarCorreoSistema($correoDestino, $asunto, $cuerpo);
                }
            }

            if ($doc['archivo_path']) {
                $ruta = __DIR__ . '/' . $doc['archivo_path'];
                if (is_file($ruta)) @unlink($ruta);
            }
            $pdo->prepare("DELETE FROM documentos WHERE id = ?")->execute([$docId]);
            $mensaje = 'Documento eliminado. Vuelve a aparecer en "pendientes" si era el único de su tipo.';
        }
    }

    // -- Cargar documento (archivo o texto) --
    elseif ($accion === 'cargar_documento') {
        $slot = decodificarSlot($_POST['slot'] ?? '');
        $tipoCarga = $_POST['tipo_carga'] ?? '';

        if (!$slot || !in_array($tipoCarga, ['archivo','texto'], true)) {
            $error = 'Selecciona un documento pendiente válido.';
        } else {
            // Confirmar que el slot elegido de verdad aplica a esta obra
            // (evita que alguien manipule el <select> por fuera del HTML).
            $estadoActual = calcularSlotsDocumentales($pdo, $obraId);
            $slotValido = null;
            foreach ($estadoActual['pendientes'] as $p) {
                if ($p['dr']['id'] == $slot['documento_requerido_id']
                    && $p['entidad_tipo'] === $slot['entidad_tipo']
                    && $p['entidad_id'] == $slot['entidad_id']) {
                    $slotValido = $p;
                    break;
                }
            }

            if (!$slotValido) {
                $error = 'Ese documento no aplica a esta obra o ya fue cargado.';
            } elseif ($tipoCarga === 'texto') {
                $contenido = trim($_POST['contenido_texto'] ?? '');
                if (!$contenido) {
                    $error = 'Pega el contenido en el cuadro de texto.';
                } else {
                    $estadoDoc = $slotValido['dr']['requiere_revision'] ? 'pendiente_revision' : 'cumplido';
                    $pdo->prepare("
                        INSERT INTO documentos (documento_requerido_id, entidad_tipo, entidad_id, tipo_carga, contenido_texto, estado, cargado_por)
                        VALUES (?, ?, ?, 'texto', ?, ?, ?)
                    ")->execute([$slot['documento_requerido_id'], $slot['entidad_tipo'], $slot['entidad_id'], $contenido, $estadoDoc, $u['id']]);
                    $mensaje = 'Documento guardado.';
                }
            } else { // archivo
                if (empty($_FILES['archivo']['name'])) {
                    $error = 'Selecciona un archivo.';
                } elseif ($_FILES['archivo']['error'] !== UPLOAD_ERR_OK) {
                    $error = 'Error subiendo el archivo (código ' . $_FILES['archivo']['error'] . ').';
                } elseif ($_FILES['archivo']['size'] > MAX_ARCHIVO_BYTES) {
                    $error = 'El archivo supera el máximo de 5 MB.';
                } else {
                    if (!is_dir($DIR_UPLOADS)) mkdir($DIR_UPLOADS, 0755, true);
                    $nombreOriginal = basename($_FILES['archivo']['name']);
                    $nombreGuardado = uniqid('doc_', true) . '_' . preg_replace('/[^A-Za-z0-9_.-]/', '_', $nombreOriginal);
                    $destino = $DIR_UPLOADS . '/' . $nombreGuardado;

                    if (!move_uploaded_file($_FILES['archivo']['tmp_name'], $destino)) {
                        $error = 'No se pudo guardar el archivo en el servidor.';
                    } else {
                        $estadoDoc = $slotValido['dr']['requiere_revision'] ? 'pendiente_revision' : 'cumplido';
                        $rutaRelativa = 'uploads/obras/' . $obraId . '/' . $nombreGuardado;
                        $pdo->prepare("
                            INSERT INTO documentos
                                (documento_requerido_id, entidad_tipo, entidad_id, tipo_carga,
                                 archivo_path, archivo_nombre_original, archivo_peso_bytes, estado, cargado_por)
                            VALUES (?, ?, ?, 'archivo', ?, ?, ?, ?, ?)
                        ")->execute([
                            $slot['documento_requerido_id'], $slot['entidad_tipo'], $slot['entidad_id'],
                            $rutaRelativa, $nombreOriginal, $_FILES['archivo']['size'], $estadoDoc, $u['id'],
                        ]);
                        $mensaje = 'Archivo cargado.';
                    }
                }
            }
        }
    }

    // -- Finalizar obra --
    elseif ($accion === 'finalizar') {
        $estadoActual = calcularSlotsDocumentales($pdo, $obraId);
        if ($estadoActual['obligatorios_completos'] < $estadoActual['obligatorios_totales']) {
            $faltan = $estadoActual['obligatorios_totales'] - $estadoActual['obligatorios_completos'];
            $error = "No se puede finalizar: faltan {$faltan} documento(s) obligatorio(s) por cargar.";
        } else {
            $pdo->prepare("UPDATE obras SET estado = 'finalizado', finalizado_en = NOW() WHERE id = ?")->execute([$obraId]);

            $stmtCreador = $pdo->prepare("SELECT correo FROM usuarios WHERE id = ?");
            $stmtCreador->execute([$obra['creado_por']]);
            $correoCreador = $stmtCreador->fetchColumn();
            enviarCorreoSistema(
                $correoCreador,
                "Obra finalizada — {$obra['titulo']} ({$obra['numero_caso']})",
                "La obra \"{$obra['titulo']}\" (caso {$obra['numero_caso']}) fue marcada como finalizada."
            );

            header('Location: obra_detalle.php?id=' . $obraId . '&finalizado=1');
            exit;
        }
    }

    // -- Agregar nota de validación de reparto (revisor/admin, en
    //    cualquier estado de la obra — es un histórico, no una edición) --
    elseif ($accion === 'agregar_nota_reparto') {
        if (!in_array($u['rol'], ['revisor', 'admin'], true)) {
            $error = 'Solo un revisor o administrador puede dejar notas de validación.';
        } else {
            $obraTitularId = (int)($_POST['obra_titular_id'] ?? 0);
            $nota = trim($_POST['nota'] ?? '');

            $stmt = $pdo->prepare("SELECT 1 FROM obra_titulares WHERE id = ? AND obra_id = ?");
            $stmt->execute([$obraTitularId, $obraId]);

            if (!$stmt->fetchColumn()) {
                $error = 'Ese titular no pertenece a esta obra.';
            } elseif (!$nota) {
                $error = 'Escribe el contenido de la nota.';
            } else {
                // El archivo de soporte es opcional — una nota puede
                // quedar solo con texto (ej. "llamé y confirmó verbalmente").
                $archivoPath = null;
                $archivoNombre = null;
                $archivoPeso = null;

                if (!empty($_FILES['archivo_soporte']['name'])) {
                    if ($_FILES['archivo_soporte']['error'] !== UPLOAD_ERR_OK) {
                        $error = 'Error subiendo el archivo (código ' . $_FILES['archivo_soporte']['error'] . ').';
                    } elseif ($_FILES['archivo_soporte']['size'] > MAX_ARCHIVO_BYTES) {
                        $error = 'El archivo supera el máximo de 5 MB.';
                    } else {
                        if (!is_dir($DIR_UPLOADS)) mkdir($DIR_UPLOADS, 0755, true);
                        $nombreOriginal = basename($_FILES['archivo_soporte']['name']);
                        $nombreGuardado = uniqid('nota_', true) . '_' . preg_replace('/[^A-Za-z0-9_.-]/', '_', $nombreOriginal);
                        $destino = $DIR_UPLOADS . '/' . $nombreGuardado;

                        if (!move_uploaded_file($_FILES['archivo_soporte']['tmp_name'], $destino)) {
                            $error = 'No se pudo guardar el archivo de soporte en el servidor.';
                        } else {
                            $archivoPath = 'uploads/obras/' . $obraId . '/' . $nombreGuardado;
                            $archivoNombre = $nombreOriginal;
                            $archivoPeso = $_FILES['archivo_soporte']['size'];
                        }
                    }
                }

                if (!$error) {
                    $pdo->prepare("
                        INSERT INTO notas_reparto (obra_titular_id, revisor_id, nota, archivo_path, archivo_nombre_original, archivo_peso_bytes)
                        VALUES (?, ?, ?, ?, ?, ?)
                    ")->execute([$obraTitularId, $u['id'], $nota, $archivoPath, $archivoNombre, $archivoPeso]);
                    $mensaje = 'Nota de validación agregada al histórico.';
                }
            }
        }
    }
}

// ── Datos para renderizar ────────────────────────────────────
$stmt = $pdo->prepare("
    SELECT ot.*, t.nombres_completos, t.tipo_persona, t.identificacion, t.correo, t.celular, t.es_causahabiente
    FROM obra_titulares ot JOIN titulares t ON t.id = ot.titular_id
    WHERE ot.obra_id = ? ORDER BY ot.creado_en
");
$stmt->execute([$obraId]);
$titulares = $stmt->fetchAll();

// Historial de notas de validación de reparto, agrupado por obra_titular_id
$notasReparto = [];
if (!empty($titulares)) {
    $ids = array_column($titulares, 'id');
    $marcadores = implode(',', array_fill(0, count($ids), '?'));
    $stmtNotas = $pdo->prepare("
        SELECT nr.*, u.nombre_completo AS revisor_nombre
        FROM notas_reparto nr JOIN usuarios u ON u.id = nr.revisor_id
        WHERE nr.obra_titular_id IN ($marcadores)
        ORDER BY nr.creado_en ASC
    ");
    $stmtNotas->execute($ids);
    foreach ($stmtNotas->fetchAll() as $n) {
        $notasReparto[$n['obra_titular_id']][] = $n;
    }
}

$estado = calcularSlotsDocumentales($pdo, $obraId);

$urlVerificacion = null;
if ($obra['codigo_verificacion']) {
    $urlVerificacion = (!empty($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST']
        . dirname($_SERVER['SCRIPT_NAME']) . '/verificar.php?codigo=' . $obra['codigo_verificacion'];
}

// Buscar si el "Audio legítimamente fijado (MP3)" ya está cargado como
// archivo (no como texto), para mostrar el botón de reproducir junto
// al de finalizar.
$audioDocumentoId = null;
foreach ($estado['cargados'] as $c) {
    if ($c['dr']['nombre'] === 'Audio legítimamente fijado (MP3)') {
        foreach ($c['archivos'] as $a) {
            if ($a['tipo_carga'] === 'archivo') {
                $audioDocumentoId = $a['id'];
                break 2;
            }
        }
    }
}

$sumaReparto = 0;
foreach ($titulares as $t) $sumaReparto += (float)($t['porcentaje_reparto'] ?? 0);

function badgeEstado(string $estado, ?string $motivoRechazo = null): string {
    if ($estado === 'rechazado') {
        $motivo = htmlspecialchars($motivoRechazo ?? 'Sin motivo registrado.');
        return '<button type="button" class="badge-danger" style="border:none;cursor:pointer" '
             . 'onclick="abrirModalMotivoRechazo(\'' . addslashes($motivo) . '\')">Rechazado</button>';
    }
    return match ($estado) {
        'aprobado', 'cumplido'  => '<span class="badge-ok">' . ($estado === 'aprobado' ? 'Aprobado' : 'Cumplido') . '</span>',
        'pendiente_revision'    => '<span class="badge-warn">En revisión</span>',
        default                 => '<span class="text-muted">—</span>',
    };
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?= htmlspecialchars($obra['titulo']) ?> — 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' : '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">
    <a href="obras.php" class="text-decoration-none" style="font-size:.82rem;color:var(--azul-texto)"><i class="bi bi-arrow-left"></i> Mis obras</a>

    <div class="d-flex justify-content-between align-items-center mt-2 mb-3">
        <div>
            <h5 class="mb-0"><?= htmlspecialchars($obra['titulo']) ?></h5>
            <?php if ($obra['numero_caso']): ?>
                <span class="text-muted" style="font-size:.78rem;font-family:monospace"><?= htmlspecialchars($obra['numero_caso']) ?></span>
            <?php endif; ?>
            <span class="badge-<?= $obra['estado'] === 'finalizado' ? 'ok' : 'warn' ?>"><?= ucfirst($obra['estado']) ?></span>
            <p class="text-muted mb-0 mt-1" style="font-size:.78rem">
                Creada el <?= date('d M Y', strtotime($obra['creado_en'])) ?>
                <?php if ($obra['finalizado_en']): ?> · Finalizada el <?= date('d M Y', strtotime($obra['finalizado_en'])) ?><?php endif; ?>
            </p>
        </div>
        <div class="d-flex align-items-center gap-2">
            <?php if ($audioDocumentoId): ?>
            <button type="button" id="btnReproducirAudio" class="btn btn-sm btn-outline-secondary"
                onclick="toggleAudioObra(<?= $audioDocumentoId ?>)">
                <i class="bi bi-play-fill" id="iconoAudioObra"></i> <span id="textoAudioObra">Escuchar audio</span>
            </button>
            <audio id="reproductorAudioObra" style="display:none"></audio>
            <?php endif; ?>
            <?php if ($obra['codigo_verificacion']): ?>
            <button type="button" class="btn btn-sm btn-outline-secondary" data-bs-toggle="modal" data-bs-target="#modalVerificacion">
                <i class="bi bi-qr-code"></i> Verificación pública
            </button>
            <?php endif; ?>
            <?php if ($obraEditable): ?>
            <form method="post" onsubmit="return confirm('¿Finalizar esta obra? No podrás editarla como borrador después.');" class="mb-0">
                <?= csrfCampoOculto() ?>
                <input type="hidden" name="accion" value="finalizar">
                <button type="submit" class="btn btn-sm btn-sgc-primary">Finalizar obra</button>
            </form>
            <?php endif; ?>
        </div>
    </div>

    <?php if (!empty($_GET['finalizado'])): ?>
        <div class="alert alert-success py-2" style="font-size:.85rem">Obra finalizada correctamente.</div>
    <?php endif; ?>
    <?php if ($error): ?>
        <div class="alert alert-danger py-2" style="font-size:.85rem"><?= htmlspecialchars($error) ?></div>
    <?php endif; ?>
    <?php if ($mensaje): ?>
        <div class="alert alert-success py-2" style="font-size:.85rem"><?= htmlspecialchars($mensaje) ?></div>
    <?php endif; ?>

    <!-- Titulares -->
    <div class="card mb-4">
        <div class="card-body">
            <div class="d-flex justify-content-between align-items-center mb-2">
                <h6 class="mb-0">Titulares de la obra</h6>
                <?php if ($obraEditable): ?>
                <button class="btn btn-sm btn-outline-secondary" data-bs-toggle="modal" data-bs-target="#modalTitular"><i class="bi bi-person-plus"></i> Agregar titular</button>
                <?php endif; ?>
            </div>
            <?php if (empty($titulares)): ?>
                <p class="text-muted mb-0" style="font-size:.85rem"><i class="bi bi-people me-1"></i>Aún no hay titulares registrados para esta obra.</p>
            <?php else: ?>
                <table class="table table-sm mb-1">
                    <thead style="font-size:.78rem;color:#6c757d">
                        <tr><th>Nombre</th><th>Identificación</th><th>Rol</th><th>% Reparto</th><th>Acciones</th></tr>
                    </thead>
                    <tbody style="font-size:.85rem">
                        <?php foreach ($titulares as $t): $notas = $notasReparto[$t['id']] ?? []; ?>
                        <tr>
                            <td><?= htmlspecialchars($t['nombres_completos']) ?></td>
                            <td><?= htmlspecialchars($t['identificacion']) ?></td>
                            <td><?= htmlspecialchars(ucfirst(str_replace('_',' ',$t['rol']))) ?></td>
                            <td><?= $t['porcentaje_reparto'] !== null ? number_format($t['porcentaje_reparto'],2).'%' : '—' ?></td>
                            <td>
                                <div class="d-flex gap-1">
                                    <button type="button" class="btn-accion"
                                        onclick='abrirModalNotasReparto(<?= json_encode([
                                            "obra_titular_id" => $t["id"],
                                            "nombre" => $t["nombres_completos"],
                                            "notas" => array_map(fn($n) => [
                                                "id" => $n["id"],
                                                "nota" => $n["nota"],
                                                "revisor" => $n["revisor_nombre"],
                                                "fecha" => date("d M Y H:i", strtotime($n["creado_en"])),
                                                "archivo_nombre_original" => $n["archivo_nombre_original"] ?? null,
                                            ], $notas),
                                        ], JSON_UNESCAPED_UNICODE | JSON_HEX_APOS) ?>)'>
                                        <i class="bi bi-journal-text"></i> Notas<?= count($notas) ? ' (' . count($notas) . ')' : '' ?>
                                    </button>
                                    <?php if ($obraEditable): ?>
                                    <button type="button" class="btn-accion"
                                        onclick='abrirModalEditarTitular(<?= json_encode([
                                            "obra_titular_id" => $t["id"],
                                            "tipo_persona" => $t["tipo_persona"],
                                            "nombres_completos" => $t["nombres_completos"],
                                            "identificacion" => $t["identificacion"],
                                            "correo" => $t["correo"],
                                            "celular" => $t["celular"],
                                            "rol" => $t["rol"],
                                            "porcentaje_reparto" => $t["porcentaje_reparto"],
                                            "es_causahabiente" => (bool)$t["es_causahabiente"],
                                        ], JSON_UNESCAPED_UNICODE | JSON_HEX_APOS) ?>)'>
                                        <i class="bi bi-pencil"></i> Editar
                                    </button>
                                    <form method="post" onsubmit="return confirm('¿Quitar a este titular de la obra? También se borrarán los documentos cargados específicos de esa relación (ej. contratos), no sus datos generales.');" class="d-inline">
                                        <?= csrfCampoOculto() ?>
                                        <input type="hidden" name="accion" value="eliminar_titular">
                                        <input type="hidden" name="obra_titular_id" value="<?= $t['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>
                <?php if ($sumaReparto > 0): ?>
                    <p style="font-size:.78rem" class="<?= abs($sumaReparto-100) < 0.01 ? 'text-success' : 'text-warning' ?> mb-0">
                        Suma de reparto: <?= number_format($sumaReparto,2) ?>%
                        <?= abs($sumaReparto-100) < 0.01 ? '✓' : '— revisar manualmente, no suma 100%' ?>
                    </p>
                <?php endif; ?>
            <?php endif; ?>
        </div>
    </div>

    <!-- Cargar documento pendiente / Documentos cargados -->
    <div class="card mb-3">
        <div class="card-body">
            <!-- Cargar documento pendiente -->
            <?php if ($obraEditable): ?>
            <p class="mb-2" style="font-size:.82rem;font-weight:600">Cargar documento pendiente</p>
            <?php if (empty($estado['pendientes'])): ?>
                <p class="text-muted mb-0" style="font-size:.85rem">No hay documentos pendientes por cargar.</p>
            <?php else: ?>
            <form method="post" enctype="multipart/form-data" id="formCargarDoc">
                <?= csrfCampoOculto() ?>
                <input type="hidden" name="accion" value="cargar_documento">
                <div class="row g-2 align-items-end">
                    <div class="col-md-5">
                        <select name="slot" class="form-select form-select-sm" required>
                            <?php foreach ($estado['pendientes'] as $p): ?>
                                <option value="<?= htmlspecialchars(codificarSlot($p)) ?>">
                                    <?= htmlspecialchars($p['dr']['nombre']) ?><?= $p['etiqueta'] ? ' — ' . htmlspecialchars($p['etiqueta']) : '' ?>
                                    <?= $p['dr']['obligatorio'] ? ' (obligatorio)' : '' ?>
                                </option>
                            <?php endforeach; ?>
                        </select>
                    </div>
                    <div class="col-md-3">
                        <select name="tipo_carga" class="form-select form-select-sm" id="selectTipoCarga">
                            <option value="archivo">Subir archivo</option>
                            <option value="texto">Pegar texto</option>
                        </select>
                    </div>
                    <div class="col-md-3" id="campoArchivo">
                        <input type="file" name="archivo" class="form-control form-control-sm">
                    </div>
                    <div class="col-md-3 d-none" id="campoTexto">
                        <textarea name="contenido_texto" class="form-control form-control-sm" rows="1" placeholder="Pega aquí el contenido"></textarea>
                    </div>
                    <div class="col-md-1">
                        <button type="submit" class="btn btn-sm btn-sgc-primary w-100">Cargar</button>
                    </div>
                </div>
                <p class="text-muted mt-1 mb-0" style="font-size:.72rem">Archivos: máx. 5 MB cada uno. Solo aparecen aquí los documentos que aún faltan por cargar para esta obra.</p>
            </form>
            <?php endif; ?>
            <hr class="my-3">
            <?php else: ?>
                <p class="text-muted mb-3" style="font-size:.82rem">
                    <?= $obra['estado'] === 'finalizado' ? 'La obra está finalizada — no se pueden cargar más documentos.' : 'No tienes permiso para cargar documentos en esta obra.' ?>
                </p>
            <?php endif; ?>

            <!-- Documentos cargados -->
            <p class="mb-2" style="font-size:.82rem;font-weight:600">Documentos cargados</p>
            <?php if (empty($estado['cargados'])): ?>
                <p class="text-muted mb-0" style="font-size:.85rem"><i class="bi bi-inbox me-1"></i>Todavía no se ha cargado ningún documento.</p>
            <?php else: ?>
                <div class="table-responsive">
                <table class="table table-sm align-middle mb-0">
                    <thead style="font-size:.75rem;color:#6c757d">
                        <tr>
                            <th>Documento</th>
                            <th>Para</th>
                            <th>Contenido</th>
                            <th>Estado</th>
                            <th>Acciones</th>
                        </tr>
                    </thead>
                    <tbody style="font-size:.85rem">
                        <?php foreach ($estado['cargados'] as $c): foreach ($c['archivos'] as $a): ?>
                        <tr>
                            <td><?= htmlspecialchars($c['dr']['nombre']) ?></td>
                            <td class="text-muted"><?= $c['etiqueta'] ? htmlspecialchars($c['etiqueta']) : '—' ?></td>
                            <td class="text-muted">
                                <?= $a['tipo_carga'] === 'archivo' ? htmlspecialchars($a['archivo_nombre_original']) : '(texto pegado)' ?>
                            </td>
                            <td><?= badgeEstado($a['estado'], $a['motivo_rechazo']) ?></td>
                            <td>
                                <div class="d-flex gap-1">
                                    <button type="button" class="btn-accion"
                                        onclick='abrirModalVerDocumento(<?= json_encode([
                                            "documento_id" => $a["id"],
                                            "nombre" => $c['dr']['nombre'],
                                            "tipo_carga" => $a["tipo_carga"],
                                            "contenido_texto" => $a["contenido_texto"],
                                            "archivo_nombre_original" => $a["archivo_nombre_original"],
                                        ], JSON_UNESCAPED_UNICODE | JSON_HEX_APOS) ?>)'>
                                        <i class="bi bi-eye"></i> Ver
                                    </button>
                                    <?php if ($obraEditable): ?>
                                    <button type="button" class="btn-accion"
                                        onclick='abrirModalEditarDocumento(<?= json_encode([
                                            "documento_id" => $a["id"],
                                            "nombre" => $c['dr']['nombre'],
                                        ], JSON_UNESCAPED_UNICODE | JSON_HEX_APOS) ?>)'>
                                        <i class="bi bi-pencil"></i> Editar
                                    </button>
                                    <form method="post" onsubmit="return confirm('¿Eliminar este archivo? Si era el único de este documento, volverá a aparecer como pendiente.');" class="d-inline">
                                        <?= csrfCampoOculto() ?>
                                        <input type="hidden" name="accion" value="eliminar_documento">
                                        <input type="hidden" name="documento_id" value="<?= $a['id'] ?>">
                                        <button type="submit" class="btn-accion peligro"><i class="bi bi-trash"></i> Eliminar</button>
                                    </form>
                                    <?php elseif ($obra['estado'] === 'finalizado' && $u['rol'] === 'admin'): ?>
                                    <button type="button" class="btn-accion peligro"
                                        onclick="abrirModalEliminarFinalizado(<?= $a['id'] ?>, '<?= htmlspecialchars(addslashes($c['dr']['nombre'])) ?>')">
                                        <i class="bi bi-trash"></i> Eliminar
                                    </button>
                                    <?php endif; ?>
                                </div>
                            </td>
                        </tr>
                        <?php endforeach; endforeach; ?>
                    </tbody>
                </table>
                </div>
            <?php endif; ?>
        </div>
    </div>

    <div class="bg-light rounded p-3 d-flex justify-content-between" style="font-size:.85rem">
        <span class="text-muted">Obligatorios completos</span>
        <strong><?= $estado['obligatorios_completos'] ?> / <?= $estado['obligatorios_totales'] ?></strong>
    </div>
</div>

<!-- Modal agregar titular -->
<div class="modal fade" id="modalTitular" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <form method="post">
                <?= csrfCampoOculto() ?>
                <input type="hidden" name="accion" value="agregar_titular">
                <div class="modal-header">
                    <h6 class="modal-title">Agregar titular a la obra</h6>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>
                <div class="modal-body">
                    <div class="row g-2 mb-2">
                        <div class="col-6">
                            <label class="form-label" style="font-size:.8rem">Tipo de persona</label>
                            <select name="tipo_persona" class="form-select form-select-sm" required>
                                <option value="natural">Natural</option>
                                <option value="juridica">Jurídica</option>
                            </select>
                        </div>
                        <div class="col-6">
                            <label class="form-label" style="font-size:.8rem">Rol en esta obra</label>
                            <select name="rol" class="form-select form-select-sm" required>
                                <option value="autor">Autor</option>
                                <option value="compositor">Compositor</option>
                                <option value="interprete">Intérprete</option>
                                <option value="ejecutante">Ejecutante</option>
                                <option value="productor_fonografico">Productor fonográfico</option>
                                <option value="editor">Editor</option>
                                <option value="arreglista">Arreglista</option>
                            </select>
                        </div>
                    </div>
                    <div class="mb-2">
                        <label class="form-label" style="font-size:.8rem">Nombres completos</label>
                        <input type="text" name="nombres_completos" class="form-control form-control-sm" required>
                    </div>
                    <div class="row g-2 mb-2">
                        <div class="col-6">
                            <label class="form-label" style="font-size:.8rem">Identificación (CC/NIT)</label>
                            <input type="text" name="identificacion" class="form-control form-control-sm" required>
                        </div>
                        <div class="col-6">
                            <label class="form-label" style="font-size:.8rem">% de reparto (opcional)</label>
                            <input type="number" step="0.01" min="0" max="100" name="porcentaje_reparto" class="form-control form-control-sm">
                        </div>
                    </div>
                    <div class="row g-2 mb-2">
                        <div class="col-6">
                            <label class="form-label" style="font-size:.8rem">Correo (opcional)</label>
                            <input type="email" name="correo" class="form-control form-control-sm">
                        </div>
                        <div class="col-6">
                            <label class="form-label" style="font-size:.8rem">Celular (opcional)</label>
                            <input type="text" name="celular" class="form-control form-control-sm">
                        </div>
                    </div>
                    <div class="form-check">
                        <input class="form-check-input" type="checkbox" name="es_causahabiente" id="esCausahabiente">
                        <label class="form-check-label" for="esCausahabiente" style="font-size:.8rem">Es causahabiente (heredero)</label>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="submit" class="btn btn-sm btn-sgc-primary">Agregar</button>
                </div>
            </form>
        </div>
    </div>
</div>

<!-- Modal editar titular -->
<div class="modal fade" id="modalEditarTitular" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <form method="post" id="formEditarTitular">
                <?= csrfCampoOculto() ?>
                <input type="hidden" name="accion" value="editar_titular">
                <input type="hidden" name="obra_titular_id" id="editObraTitularId">
                <div class="modal-header">
                    <h6 class="modal-title">Editar titular</h6>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>
                <div class="modal-body">
                    <div class="row g-2 mb-2">
                        <div class="col-6">
                            <label class="form-label" style="font-size:.8rem">Tipo de persona</label>
                            <select name="tipo_persona" id="editTipoPersona" class="form-select form-select-sm" required>
                                <option value="natural">Natural</option>
                                <option value="juridica">Jurídica</option>
                            </select>
                        </div>
                        <div class="col-6">
                            <label class="form-label" style="font-size:.8rem">Rol en esta obra</label>
                            <select name="rol" id="editRol" class="form-select form-select-sm" required>
                                <option value="autor">Autor</option>
                                <option value="compositor">Compositor</option>
                                <option value="interprete">Intérprete</option>
                                <option value="ejecutante">Ejecutante</option>
                                <option value="productor_fonografico">Productor fonográfico</option>
                                <option value="editor">Editor</option>
                                <option value="arreglista">Arreglista</option>
                            </select>
                        </div>
                    </div>
                    <div class="mb-2">
                        <label class="form-label" style="font-size:.8rem">Nombres completos</label>
                        <input type="text" name="nombres_completos" id="editNombres" class="form-control form-control-sm" required>
                    </div>
                    <div class="row g-2 mb-2">
                        <div class="col-6">
                            <label class="form-label" style="font-size:.8rem">Identificación (CC/NIT)</label>
                            <input type="text" name="identificacion" id="editIdentificacion" class="form-control form-control-sm" required>
                        </div>
                        <div class="col-6">
                            <label class="form-label" style="font-size:.8rem">% de reparto (opcional)</label>
                            <input type="number" step="0.01" min="0" max="100" name="porcentaje_reparto" id="editPorcentaje" class="form-control form-control-sm">
                        </div>
                    </div>
                    <div class="row g-2 mb-2">
                        <div class="col-6">
                            <label class="form-label" style="font-size:.8rem">Correo (opcional)</label>
                            <input type="email" name="correo" id="editCorreo" class="form-control form-control-sm">
                        </div>
                        <div class="col-6">
                            <label class="form-label" style="font-size:.8rem">Celular (opcional)</label>
                            <input type="text" name="celular" id="editCelular" class="form-control form-control-sm">
                        </div>
                    </div>
                    <div class="form-check">
                        <input class="form-check-input" type="checkbox" name="es_causahabiente" id="editCausahabiente">
                        <label class="form-check-label" for="editCausahabiente" style="font-size:.8rem">Es causahabiente (heredero)</label>
                    </div>
                    <p class="text-muted mt-2 mb-0" style="font-size:.72rem">
                        Nota: nombres/identificación/correo/celular son datos de la persona — si este titular está en otras obras, el cambio se refleja en todas.
                    </p>
                </div>
                <div class="modal-footer">
                    <button type="submit" class="btn btn-sm btn-sgc-primary">Guardar cambios</button>
                </div>
            </form>
        </div>
    </div>
</div>

<!-- Modal verificación pública -->
<?php if ($urlVerificacion): ?>
<div class="modal fade" id="modalVerificacion" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h6 class="modal-title">Verificación pública de esta obra</h6>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body text-center">
                <p class="text-muted mb-3" style="font-size:.83rem">
                    Cualquiera con este código o QR puede confirmar que la obra existe y su estado —
                    sin ver documentos ni datos privados de los titulares.
                </p>
                <img src="https://api.qrserver.com/v1/create-qr-code/?size=180x180&data=<?= urlencode($urlVerificacion) ?>"
                     alt="Código QR de verificación" class="mb-3" style="border:1px solid #e4e7ec;border-radius:8px">
                <p class="mb-1" style="font-size:.8rem">Código de verificación</p>
                <p class="fw-semibold mb-3" style="font-family:monospace;font-size:1.05rem"><?= htmlspecialchars($obra['codigo_verificacion']) ?></p>
                <input type="text" class="form-control form-control-sm text-center" readonly value="<?= htmlspecialchars($urlVerificacion) ?>" onclick="this.select()">
            </div>
        </div>
    </div>
</div>
<?php endif; ?>

<!-- Modal motivo de rechazo -->
<div class="modal fade" id="modalMotivoRechazo" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h6 class="modal-title">Motivo del rechazo</h6>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body">
                <p class="mb-0" id="motivoRechazoTexto" style="font-size:.88rem"></p>
            </div>
        </div>
    </div>
</div>

<!-- Modal notas de validación de reparto -->
<div class="modal fade" id="modalNotasReparto" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h6 class="modal-title" id="notasRepartoTitulo">Notas de validación</h6>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body">
                <div id="notasRepartoHistorial" style="max-height:260px;overflow:auto" class="mb-3"></div>
                <?php if (in_array($u['rol'], ['revisor','admin'], true)): ?>
                <form method="post" enctype="multipart/form-data">
                    <?= csrfCampoOculto() ?>
                    <input type="hidden" name="accion" value="agregar_nota_reparto">
                    <input type="hidden" name="obra_titular_id" id="notaObraTitularId">
                    <label class="form-label">Agregar nota</label>
                    <textarea name="nota" class="form-control mb-2" rows="3" required
                        placeholder="Ej. Se confirmó telefónicamente con el coautor el 14/07 que acepta el 40% asignado."></textarea>
                    <label class="form-label">Documento de soporte (opcional)</label>
                    <input type="file" name="archivo_soporte" class="form-control form-control-sm mb-2">
                    <p class="text-muted mb-2" style="font-size:.72rem">Ej. captura del correo o mensaje donde el coautor acepta. Máx. 5 MB.</p>
                    <button type="submit" class="btn btn-sm btn-sgc-primary">Guardar nota</button>
                </form>
                <p class="text-muted mt-2 mb-0" style="font-size:.72rem">
                    Estas notas quedan como histórico permanente — no se pueden editar ni borrar.
                </p>
                <?php endif; ?>
            </div>
        </div>
    </div>
</div>

<!-- Modal eliminar documento de obra FINALIZADA (admin, con motivo) -->
<div class="modal fade" id="modalEliminarFinalizado" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <form method="post">
                <?= csrfCampoOculto() ?>
                <input type="hidden" name="accion" value="eliminar_documento">
                <input type="hidden" name="documento_id" id="eliminarFinalizadoDocId">
                <div class="modal-header">
                    <h6 class="modal-title" id="eliminarFinalizadoTitulo">Eliminar documento (obra finalizada)</h6>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>
                <div class="modal-body">
                    <div class="alert alert-danger py-2 mb-3" style="font-size:.8rem">
                        <i class="bi bi-exclamation-triangle me-1"></i>
                        Esta obra ya está finalizada. Al eliminar, se notificará por correo a todos los interesados
                        (quien creó la obra y los titulares con correo registrado) junto con el motivo.
                    </div>
                    <label class="form-label">Motivo de la eliminación</label>
                    <textarea name="motivo_eliminacion" class="form-control" rows="3" required
                        placeholder="Explica por qué se elimina este documento de una obra ya finalizada…"></textarea>
                </div>
                <div class="modal-footer">
                    <button type="submit" class="btn btn-sm btn-outline-danger">Eliminar y notificar</button>
                </div>
            </form>
        </div>
    </div>
</div>

<!-- Modal ver documento -->
<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 editar documento (reemplazar archivo/texto) -->
<div class="modal fade" id="modalEditarDocumento" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <form method="post" enctype="multipart/form-data">
                <?= csrfCampoOculto() ?>
                <input type="hidden" name="accion" value="editar_documento">
                <input type="hidden" name="documento_id" id="editDocDocumentoId">
                <div class="modal-header">
                    <h6 class="modal-title" id="editDocTitulo">Reemplazar documento</h6>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>
                <div class="modal-body">
                    <label class="form-label" style="font-size:.8rem">Nuevo contenido</label>
                    <select name="tipo_carga" id="editDocTipoCarga" class="form-select form-select-sm mb-2">
                        <option value="archivo">Subir archivo</option>
                        <option value="texto">Pegar texto</option>
                    </select>
                    <div id="editDocCampoArchivo">
                        <input type="file" name="archivo" class="form-control form-control-sm">
                    </div>
                    <div id="editDocCampoTexto" class="d-none">
                        <textarea name="contenido_texto" class="form-control form-control-sm" rows="4" placeholder="Pega aquí el nuevo contenido"></textarea>
                    </div>
                    <p class="text-muted mt-2 mb-0" style="font-size:.72rem">
                        El archivo/texto anterior se reemplaza (no se acumula). Si este documento requiere revisión, volverá a quedar "en revisión".
                    </p>
                </div>
                <div class="modal-footer">
                    <button type="submit" class="btn btn-sm btn-sgc-primary">Reemplazar</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 selectTipo = document.getElementById('selectTipoCarga');
if (selectTipo) {
    selectTipo.addEventListener('change', function() {
        document.getElementById('campoArchivo').classList.toggle('d-none', this.value !== 'archivo');
        document.getElementById('campoTexto').classList.toggle('d-none', this.value !== 'texto');
    });
}

function toggleAudioObra(documentoId) {
    const audio = document.getElementById('reproductorAudioObra');
    const icono = document.getElementById('iconoAudioObra');
    const texto = document.getElementById('textoAudioObra');

    if (!audio.src) {
        audio.src = 'ver_archivo.php?id=' + encodeURIComponent(documentoId);
    }

    if (audio.paused) {
        audio.play();
        icono.className = 'bi bi-stop-fill';
        texto.textContent = 'Detener';
    } else {
        audio.pause();
        icono.className = 'bi bi-play-fill';
        texto.textContent = 'Escuchar audio';
    }
}

// Si el audio termina solo, regresar el botón a su estado inicial.
document.addEventListener('DOMContentLoaded', function() {
    const audio = document.getElementById('reproductorAudioObra');
    if (audio) {
        audio.addEventListener('ended', function() {
            document.getElementById('iconoAudioObra').className = 'bi bi-play-fill';
            document.getElementById('textoAudioObra').textContent = 'Escuchar audio';
        });
    }
});

function abrirModalMotivoRechazo(motivo) {
    document.getElementById('motivoRechazoTexto').textContent = motivo;
    new bootstrap.Modal(document.getElementById('modalMotivoRechazo')).show();
}

function abrirModalNotasReparto(datos) {
    document.getElementById('notasRepartoTitulo').textContent = 'Notas de validación — ' + datos.nombre;
    document.getElementById('notaObraTitularId').value = datos.obra_titular_id;

    const cont = document.getElementById('notasRepartoHistorial');
    if (!datos.notas.length) {
        cont.innerHTML = '<p class="text-muted mb-0" style="font-size:.82rem">Sin notas registradas todavía.</p>';
    } else {
        cont.innerHTML = datos.notas.map(n => `
            <div class="border-bottom pb-2 mb-2">
                <p class="mb-1" style="font-size:.85rem">${n.nota.replace(/</g,'&lt;')}</p>
                ${n.archivo_nombre_original ? `<a href="ver_archivo.php?nota=${n.id}" target="_blank" class="btn-accion mb-1" style="display:inline-flex"><i class="bi bi-paperclip"></i> ${n.archivo_nombre_original}</a><br>` : ''}
                <p class="text-muted mb-0" style="font-size:.72rem">${n.revisor} · ${n.fecha}</p>
            </div>
        `).join('');
    }
    new bootstrap.Modal(document.getElementById('modalNotasReparto')).show();
}

function abrirModalEliminarFinalizado(documentoId, nombre) {
    document.getElementById('eliminarFinalizadoDocId').value = documentoId;
    document.getElementById('eliminarFinalizadoTitulo').textContent = 'Eliminar: ' + nombre;
    new bootstrap.Modal(document.getElementById('modalEliminarFinalizado')).show();
}

function abrirModalEditarTitular(datos) {
    document.getElementById('editObraTitularId').value = datos.obra_titular_id;
    document.getElementById('editTipoPersona').value = datos.tipo_persona;
    document.getElementById('editRol').value = datos.rol;
    document.getElementById('editNombres').value = datos.nombres_completos;
    document.getElementById('editIdentificacion').value = datos.identificacion;
    document.getElementById('editPorcentaje').value = datos.porcentaje_reparto ?? '';
    document.getElementById('editCorreo').value = datos.correo ?? '';
    document.getElementById('editCelular').value = datos.celular ?? '';
    document.getElementById('editCausahabiente').checked = !!datos.es_causahabiente;
    new bootstrap.Modal(document.getElementById('modalEditarTitular')).show();
}

// Extensiones que se pueden previsualizar directo en el navegador
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 {
            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 abrirModalEditarDocumento(datos) {
    document.getElementById('editDocDocumentoId').value = datos.documento_id;
    document.getElementById('editDocTitulo').textContent = 'Reemplazar: ' + datos.nombre;
    new bootstrap.Modal(document.getElementById('modalEditarDocumento')).show();
}

const selectEditDocTipo = document.getElementById('editDocTipoCarga');
if (selectEditDocTipo) {
    selectEditDocTipo.addEventListener('change', function() {
        document.getElementById('editDocCampoArchivo').classList.toggle('d-none', this.value !== 'archivo');
        document.getElementById('editDocCampoTexto').classList.toggle('d-none', this.value !== 'texto');
    });
}
</script>
</body>
</html>