<?php
/**
 * Document Verification Page
 * Validates signed documents using secure tokens
 */

require_once 'config.php';
require_once __DIR__ . '/app/database_schema.php';

$token = isset($_GET['token']) ? sanitizeInput($_GET['token']) : '';
$verificationResult = null;

if ($token) {
    $db = getDatabaseConnection();
    ensureDatabaseSchema($db);
    
    // Log verification attempt
    $ip = $_SERVER['REMOTE_ADDR'];
    $userAgent = $_SERVER['HTTP_USER_AGENT'];
    
    $stmt = $db->prepare("
        SELECT
            id_de_documento,
            nombre_del_firmante,
            firmado_el,
            estado_de_documento,
            nombre_de_archivo,
            tipo_de_firma,
            direccion_ip,
            hash_documento_original,
            hash_documento_firmado,
            evidencia_firma
        FROM firmas
        WHERE token = ?
    ");
    
    $stmt->bind_param('s', $token);
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($row = $result->fetch_assoc()) {
        $verificationResult = [
            'valid' => ($row['estado_de_documento'] === 'valido'),
            'documentId' => $row['id_de_documento'],
            'signerName' => $row['nombre_del_firmante'],
            'signedAt' => $row['firmado_el'],
            'status' => $row['estado_de_documento'],
            'filename' => $row['nombre_de_archivo'],
            'signatureType' => $row['tipo_de_firma'] ?: 'electronica_pdf',
            'ipAddress' => $row['direccion_ip'] ?? '',
            'originalHash' => $row['hash_documento_original'] ?? '',
            'signedHash' => $row['hash_documento_firmado'] ?? '',
            'evidence' => $row['evidencia_firma'] ?? ''
        ];
        
        $logResult = ($row['estado_de_documento'] === 'valido') ? 'valido' : 'revocado';
    } else {
        $verificationResult = ['valid' => false];
        $logResult = 'invalid';
    }
    error_log($logResult);    
    // Log this verification attempt
    if ($verificationResult !== null && isset($verificationResult['documentId'])) {
    // Log this verification attempt
    $logStmt = $db->prepare("
        INSERT INTO verificacion_de_firmas (token, verificada_el, direccion_ip, user_agent, resultado)
        VALUES (?, NOW(), ?, ?, ?)
    ");
    $logStmt->bind_param('ssss', $token, $ip, $userAgent, $logResult);
    $logStmt->execute();
    $logStmt->close();
}
    $stmt->close();
    $db->close();
}

if (!empty($verificationResult['valid']) && !empty($verificationResult['filename'])) {
    $signedPath = __DIR__ . '/signed_documents/' . $verificationResult['filename'];
    if (is_file($signedPath)) {
        $currentFileHash = hash_file('sha256', $signedPath);
        if (empty($verificationResult['signedHash'])) {
            $verificationResult['signedHash'] = $currentFileHash;
        }
        $verificationResult['currentFileHash'] = $currentFileHash;
    }
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="icon" href="graphics/signatureicon.ico" type="image/x-icon">
    <link rel="shortcut icon" href="graphics/signatureicon.ico" type="image/x-icon">
    <title>Verificación de Documento</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: linear-gradient(135deg, #29648D 0%, #29648D  100%);
            min-height: 100vh;
            display: flex;
            justify-content: center;
            align-items: center;
            padding: 20px;
        }

        .verification-container {
            background: white;
            border-radius: 15px;
            box-shadow: 0 20px 60px rgba(0,0,0,0.3);
            max-width: 600px;
            width: 100%;
            padding: 40px;
        }

        .header {
            text-align: center;
            margin-bottom: 30px;
        }

        .header h1 {
            color: #333;
            margin-bottom: 10px;
        }

        .icon {
            font-size: 80px;
            margin-bottom: 20px;
        }

        .result-box {
            padding: 30px;
            border-radius: 10px;
            margin-bottom: 20px;
        }

        .result-box.valid {
            background: linear-gradient(135deg, #29648D 0%, #2eb3e4ff 100%);
            color: white;
        }

        .result-box.invalid {
            background: linear-gradient(135deg, #ee0979 0%, #ff6a00 100%);
            color: white;
        }

        .result-box.revoked {
            background: linear-gradient(135deg, #f46b45 0%, #eea849 100%);
            color: white;
        } 

        .result-title {
            font-size: 24px;
            font-weight: bold;
            margin-bottom: 15px;
        }

        .info-row {
            display: flex;
            justify-content: space-between;
            padding: 10px 0;
            border-bottom: 1px solid rgba(255,255,255,0.3);
        }

        .info-row:last-child {
            border-bottom: none;
        }

        .info-label {
            font-weight: 600;
        }

        .info-value {
            text-align: right;
        }

        .hash-value {
            font-family: Consolas, Monaco, monospace;
            font-size: 0.75rem;
            line-height: 1.35;
            max-width: 300px;
            overflow-wrap: anywhere;
        }

        .search-form {
            text-align: center;
            padding: 20px;
            background: #f8f9ff;
            border-radius: 10px;
        }

        .search-form input {
            width: 100%;
            padding: 12px;
            border: 2px solid #667eea;
            border-radius: 5px;
            font-size: 1rem;
            margin-bottom: 15px;
        }

        .search-btn {
            background: linear-gradient(135deg, #29648D 0%, #29648D 100%);
            color: white;
            padding: 12px 30px;
            border: none;
            border-radius: 25px;
            font-size: 1rem;
            cursor: pointer;
            transition: transform 0.3s;
        }

        .search-btn:hover {
            transform: translateY(-2px);
            box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4);
        }

        .back-link {
            text-align: center;
            margin-top: 20px;
        }

        .back-link a {
            color: #667eea;
            text-decoration: none;
            font-weight: 600;
        }

        .back-link a:hover {
            text-decoration: underline;
        }

        .security-info {
            background: #f8f9ff;
            padding: 20px;
            border-radius: 10px;
            margin-top: 20px;
            font-size: 0.9rem;
            color: #696969ff;
        }

        .security-info h3 {
            color: #667eea;
            margin-bottom: 10px;
        }

        .view-doc-btn {
            display: inline-block;
            background: white;
            color: #11998e;
            padding: 10px 20px;
            border-radius: 25px;
            text-decoration: none;
            font-weight: bold;
            transition: all 0.3s ease;
            border: 2px solid white;
        }

        .view-doc-btn:hover {
            background: transparent;
            color: white;
        }
    </style>
</head>
<body>
    <div class="verification-container">
        <div class="header">
            <h1>🔐 Verificación de Documento</h1>
            <p>Sistema de verificacion de firmas electronicas</p>
        </div>

        <?php if ($verificationResult): ?>
            <?php if ($verificationResult['valid']): ?>
                <div class="icon">🔍</div>
                <div class="result-box valid"> 
                    <div class="result-title">Documento registrado</div>
                    <div class="info-row">
                        <span class="info-label">ID de Documento:</span>
                        <span class="info-value"><?php echo htmlspecialchars($verificationResult['documentId']); ?></span>
                    </div>
                    <div class="info-row">
                        <span class="info-label">Firmado por:</span>
                        <span class="info-value"><?php echo htmlspecialchars($verificationResult['signerName']); ?></span>
                    </div>
                    <div class="info-row">
                        <span class="info-label">Fecha de firma:</span>
                        <span class="info-value"><?php echo date('d/m/Y H:i', strtotime($verificationResult['signedAt'])); ?></span>
                    </div>
                    <div class="info-row">
                        <span class="info-label">Tipo de firma:</span>
                        <span class="info-value">Firma electronica PDF</span>
                    </div>
                    <div class="info-row">
                        <span class="info-label">Estado de firma PDF:</span>
                        <span class="info-value">Aplicada al documento</span>
                    </div>
                    <?php if (!empty($verificationResult['signedHash'])): ?>
                    <div class="info-row">
                        <span class="info-label">Hash firmado:</span>
                        <span class="info-value hash-value"><?php echo htmlspecialchars($verificationResult['signedHash']); ?></span>
                    </div>
                    <?php endif; ?>
                    <div class="info-row">
                        <span class="info-label">Verifique:</span>
                        <span class="info-value">Click "Comparar con Documento" el cual es copia del original y compare con el suyo</span>
                    </div> 
                    <!-- Add this new button -->
                    <div style="text-align: center; margin-top: 20px;">
                        <a href="view_document?filename=<?php echo urlencode($verificationResult['filename']); ?>&token=<?php echo urlencode($token); ?>&raw=1" 
                        target="_blank" 
                        class="view-doc-btn"
                        data-hash="<?php echo htmlspecialchars($verificationResult['currentFileHash'] ?? $verificationResult['signedHash'] ?? ''); ?>">
                            📄 Comparar con Documento
                        </a>
                    </div>
                </div>
                <div class="security-info">
                    <h3>✓ Firma electronica registrada</h3>
                    <p>El token de seguridad coincide con los registros del sistema. El PDF contiene una firma electronica aplicada por la plataforma y puede compararse con la copia registrada.</p>
                </div>
                <?php elseif (isset($verificationResult['status']) && $verificationResult['status'] === 'revoked'): ?>
                <div class="icon">⚠️</div>
                <div class="result-box revoked">
                    <div class="result-title">Documento Revocado</div>
                    <div class="info-row">
                        <span class="info-label">ID de Documento:</span>
                        <span class="info-value"><?php echo htmlspecialchars($verificationResult['documentId']); ?></span>
                    </div>
                    <div class="info-row">
                        <span class="info-label">Firmado por:</span>
                        <span class="info-value"><?php echo htmlspecialchars($verificationResult['signerName']); ?></span>
                    </div>
                    <div class="info-row">
                        <span class="info-label">Estado:</span>
                        <span class="info-value">REVOCADO</span>
                    </div>
                </div>
                <div class="security-info">
                    <h3>⚠️ Firma Revocada</h3>
                    <p>Este documento existió en el sistema pero su firma ha sido revocada. No debe considerarse válido.</p>
                </div>
            <?php else: ?>
                <div class="icon">❌</div>
                <div class="result-box invalid">
                    <div class="result-title">Documento No Válido</div>
                    <p style="margin-top: 15px;">El token de verificación no corresponde a ningún documento en nuestro sistema.</p>
                </div>
                <div class="security-info">
                    <h3>✗ Verificación Fallida</h3>
                    <p>Este token no existe en el sistema o el documento nunca fue firmado a través de nuestra plataforma. Por favor, verifique que el enlace sea correcto.</p>
                </div>
            <?php endif; ?>
        <?php else: ?>
            <div class="icon">🔍</div>
            <div class="search-form">
                <h2 style="margin-bottom: 20px; color: #333;">Verificar Documento</h2>
                <p style="margin-bottom: 20px; color: #666;">Ingrese el token de verificacion para consultar el registro de firma electronica del documento.</p>
                <form method="GET" action="verify">
                    <input type="text" name="token" placeholder="Token de verificación" required>
                    <button type="submit" class="search-btn">🔍 Verificar</button>
                </form>
            </div>
            <div class="security-info">
                <h3>ℹ️ Información</h3>
                <p>El token de verificacion se encuentra en el documento firmado, generalmente en el pie de pagina. Es un codigo unico que permite consultar el registro de la firma electronica en esta plataforma.</p>
            </div>
        <?php endif; ?>

        <div class="back-link">
            <a href="./">← Volver al inicio</a>
        </div>
    </div>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const viewButton = document.querySelector('.view-doc-btn');
            if (viewButton) {
                const originalHash = viewButton.getAttribute('data-hash');
                
                // Periodically check if document URL or content has been tampered
                setInterval(async function() {
                    try {
                        const response = await fetch(viewButton.href);
                        const newHash = response.headers.get('X-Document-Hash');
                        
                        if (newHash && newHash !== originalHash) {
                            alert('¡Advertencia! El documento ha sido modificado.');
                            window.location.reload();
                        }
                    } catch (error) {
                        console.error('Error verificando documento:', error);
                    }
                }, 5000); // Check every 5 seconds
            }
        });
    </script>
</body>
</html>
