<?php
require_once "../../functions.php";
$pag = basename($_SERVER['PHP_SELF']);
if (comprobar_override(str_replace($_SERVER['DOCUMENT_ROOT'], '', __FILE__)))
    exit;
gen_plantilla(true, $pag, false, false, '', false, false);

// Solo admins
if (!isset($_SESSION['tipo_usuario']) || $_SESSION['tipo_usuario'] !== 'admin') {
    crear_notificacion('error', 'No autorizado');
    exit;
}

$id = filter_input(INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT);
$accion = filter_input(INPUT_POST, 'accion', FILTER_SANITIZE_SPECIAL_CHARS);

if (!isset($id) || !is_numeric($id) || empty($accion)) {
    crear_log('error', 'Fallo aprobacion nota', 'gestionar_solicitud_nota.php', 'Faltan parámetros. POST: ' . json_encode($_POST));
    crear_notificacion('error', 'Faltan parámetros');
    exit;
}

// Obtener la solicitud
$solicitud = consulta('SELECT * FROM solicitudes_notas WHERE id=?', [$id], true);
if (empty($solicitud)) {
    crear_notificacion('error', 'Solicitud no encontrada');
    exit;
}

if ($accion === 'aprobar') {
    // Actualizar estado a aprobada
    $resultado = consulta('UPDATE solicitudes_notas SET estado=1 WHERE id=?', [$id], false);

    if ($resultado) {
        // Copiar la nota al registro
        $nota_actualizada = consulta(
            'UPDATE registros SET nota=? WHERE id=?',
            [$solicitud[0]['nota'], $solicitud[0]['id_registro']],
            false
        );

        if ($nota_actualizada) {
            crear_log(
                'info',
                'Nota aprobada',
                'gestionar_solicitud_nota.php',
                'Se aprobó la solicitud de nota ID ' . $id . ' para el registro ' . $solicitud[0]['id_registro']
            );
            crear_notificacion('correcto', 'Nota aprobada y guardada en el registro');
        } else {
            // Si falla la actualización, comprobamos si el registro existe
            $existe_registro = consulta('SELECT id FROM registros WHERE id=?', [$solicitud[0]['id_registro']], true);
            
            if (empty($existe_registro)) {
                // El registro fue eliminado, por lo tanto consideramos la nota aprobada aunque no se pueda guardar en el registro
                crear_log(
                    'advertencia',
                    'Nota aprobada sin registro',
                    'gestionar_solicitud_nota.php',
                    'Se aprobó la solicitud ID ' . $id . ' pero el registro ' . $solicitud[0]['id_registro'] . ' ya no existe.'
                );
                crear_notificacion('correcto', 'Solicitud aprobada (El registro asociado fue eliminado)');
            } else {
                // El registro existe pero falló la actualización por otra razón
                crear_notificacion('advertencia', 'Nota aprobada pero error al guardar en registro');
            }
        }
    } else {
        crear_notificacion('error', 'Error al aprobar la nota');
    }
} elseif ($accion === 'rechazar') {
    // Actualizar estado a rechazada
    $resultado = consulta('UPDATE solicitudes_notas SET estado=2 WHERE id=?', [$id], false);

    if ($resultado) {
        // Comprobamos si el registro existe para dar feedback detallado
        $existe_registro = consulta('SELECT id FROM registros WHERE id=?', [$solicitud[0]['id_registro']], true);
        
        if (empty($existe_registro)) {
             crear_log(
                'info',
                'Nota rechazada sin registro',
                'gestionar_solicitud_nota.php',
                'Se rechazó la solicitud de nota ID ' . $id . ' y el registro ' . $solicitud[0]['id_registro'] . ' ya no existe.'
            );
            crear_notificacion('correcto', 'Solicitud rechazada (El registro ya no existe)');
        } else {
            crear_log(
                'info',
                'Nota rechazada',
                'gestionar_solicitud_nota.php',
                'Se rechazó la solicitud de nota ID ' . $id
            );
            crear_notificacion('correcto', 'Solicitud de nota rechazada');
        }
    } else {
        crear_notificacion('error', 'Error al rechazar la nota');
    }
} else {
    crear_notificacion('error', 'Acción no válida');
}
?>