<?php 
// Configurações de segurança para sessão - devem vir antes de session_start
ini_set('session.cookie_httponly', 1);
ini_set('session.use_strict_mode', 1);

// Ativa o cookie_secure somente se estiver usando HTTPS
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') {
    ini_set('session.cookie_secure', 1);
} else {
    ini_set('session.cookie_secure', 0);
}

session_start();

// Redireciona se já estiver logado
if (isset($_SESSION['logado']) && $_SESSION['logado'] === true) {
    header('Location: index.php');
    exit;
}

require_once 'conexao.php';
$erro = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Primeiro valida o reCAPTCHA
    $recaptchaResponse = $_POST['g-recaptcha-response'] ?? '';
    $secretKey = '6LcYJmsrAAAAAFDotKvET0VhSgvu1LVUF_Z6rbeh';
    
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $data = [
        'secret' => $secretKey,
        'response' => $recaptchaResponse,
        'remoteip' => $_SERVER['REMOTE_ADDR']
    ];
    
    $options = [
        'http' => [
            'header' => "Content-type: application/x-www-form-urlencoded\r\n",
            'method' => 'POST',
            'content' => http_build_query($data)
        ]
    ];
    
    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);
    $response = json_decode($result);
    
    // Verifica se o reCAPTCHA foi válido
    if (!$response->success || $response->score < 0.5) {
        $erro = 'Falha na verificação de segurança. Por favor, tente novamente.';
    } else {
        // Se o reCAPTCHA for válido, continua com a validação do login
        $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
        $senha = $_POST['senha'] ?? '';

        if (empty($email) || empty($senha)) {
            $erro = 'Por favor, preencha todos os campos.';
        } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $erro = 'Formato de e-mail inválido.';
        } else {
            // Verifica na tabela usuarios
            $stmt = $conn->prepare("SELECT id, nome, senha, permissao, ativo, tenant_id FROM usuarios WHERE email = ?");
            $stmt->bind_param("s", $email);
            $stmt->execute();
            $resultado = $stmt->get_result();

            if ($resultado->num_rows === 1) {
                $usuario = $resultado->fetch_assoc();

                if (password_verify($senha, $usuario['senha'])) {
                    if ($usuario['ativo'] === 'sim') {
                        session_regenerate_id(true);

                        // Define estrutura completa do usuário
                        $_SESSION['logado'] = true;
                        $_SESSION['usuario'] = [
                            'id' => $usuario['id'],
                            'nome' => $usuario['nome'],
                            'email' => $email,
                            'permissao' => strtolower($usuario['permissao']),
                            'tenant_id' => $usuario['tenant_id']
                        ];

                        // Campos avulsos opcionais, para retrocompatibilidade
                        $_SESSION['usuario_id'] = $usuario['id'];
                        $_SESSION['nome_usuario'] = $usuario['nome'];
                        $_SESSION['email_usuario'] = $email;
                        $_SESSION['permissao'] = strtolower($usuario['permissao']);
                        $_SESSION['tenant_id'] = $usuario['tenant_id'];

                        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
                        $_SESSION['ultimo_acesso'] = time();

                        $update_stmt = $conn->prepare("UPDATE usuarios SET ultimo_login = NOW() WHERE id = ?");
                        $update_stmt->bind_param("i", $usuario['id']);
                        $update_stmt->execute();
                        $update_stmt->close();

                        $stmt->close();
                        header('Location: index.php');
                        exit;
                    } else {
                        $stmt->close();
                        header('Location: acesso_negado.php?motivo=conta_inativa');
                        exit;
                    }
                } else {
                    $stmt->close();
                    sleep(2);
                    $erro = 'Credenciais inválidas.';
                }
            } else {
                $stmt->close();
                sleep(2);
                $erro = 'Credenciais inválidas.';
            }
        }
    }
}

$conn->close();
?>

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon_io/favicon-16x16.png">
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon_io/favicon-32x32.png">
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>SON</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f5f5f5;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }
        .login-container {
            background: white;
            padding: 30px;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
            width: 100%;
            max-width: 400px;
        }
        .login-container h2 {
            text-align: center;
            margin-bottom: 20px;
            color: #333;
        }
        .form-group {
            margin-bottom: 15px;
        }
        .form-group label {
            display: block;
            margin-bottom: 5px;
            font-weight: bold;
        }
        .form-group input {
            width: 100%;
            padding: 10px;
            border: 1px solid #ddd;
            border-radius: 4px;
            box-sizing: border-box;
        }
        .btn-login {
            width: 100%;
            padding: 10px;
            background-color: #3498db;
            color: white;
            border: none;
            border-radius: 4px;
            cursor: pointer;
            font-size: 16px;
        }
        .btn-login:hover {
            background-color: #2980b9;
        }
        .error-message {
            color: #e74c3c;
            text-align: center;
            margin-bottom: 15px;
            padding: 10px;
            background-color: #f8d7da;
            border-radius: 4px;
        }
        .logo {
            text-align: center;
            margin-bottom: 20px;
        }
        .logo img {
            max-width: 150px;
            height: auto;
        }
        .forgot-password {
            text-align: center;
            margin-top: 15px;
        }
        .forgot-password a {
            color: #3498db;
            text-decoration: none;
        }
        .recaptcha-info {
            font-size: 12px;
            color: #666;
            text-align: center;
            margin-top: 10px;
        }
    </style>
</head>
<body>
    <div class="login-container">
        <div class="logo">
            <img src="tvitec.png" alt="Logo TVITEC" />
        </div>

        <h2>Login</h2>

        <?php if (!empty($erro)): ?>
            <div class="error-message"><?php echo htmlspecialchars($erro); ?></div>
        <?php endif; ?>

        <form method="POST" action="login.php" id="loginForm">
            <div class="form-group">
                <label for="email">E-mail:</label>
                <input
                    type="email"
                    id="email"
                    name="email"
                    required
                    value="<?php echo isset($_POST['email']) ? htmlspecialchars($_POST['email']) : ''; ?>"
                />
            </div>

            <div class="form-group">
                <label for="senha">Senha:</label>
                <input type="password" id="senha" name="senha" required minlength="8" />
            </div>

            <!-- Campo oculto para o token do reCAPTCHA -->
            <input type="hidden" id="recaptchaResponse" name="g-recaptcha-response">

            <button type="submit" class="btn-login">Entrar</button>

            <div class="recaptcha-info">
                Este site é protegido pelo reCAPTCHA e está sujeito à <a href="https://policies.google.com/privacy" target="_blank">Política de Privacidade</a> e <a href="https://policies.google.com/terms" target="_blank">Termos de Serviço</a> do Google.
            </div>

            <div class="forgot-password">
                <a href="recuperar_senha.php">Esqueceu sua senha?</a>
            </div>
        </form>
    </div>

    <!-- Carrega a API do reCAPTCHA v3 -->
    <script src="https://www.google.com/recaptcha/api.js?render=6LcYJmsrAAAAAOY9kCzOhrjPZjhHyLSQT9V1JXkr"></script>
    <script>
        // Executa o reCAPTCHA quando o formulário for carregado
        grecaptcha.ready(function() {
            grecaptcha.execute('6LcYJmsrAAAAAOY9kCzOhrjPZjhHyLSQT9V1JXkr', {action: 'login'}).then(function(token) {
                document.getElementById('recaptchaResponse').value = token;
            });
        });
        
        // Regenera o token antes do envio do formulário
        document.getElementById('loginForm').addEventListener('submit', function(e) {
            e.preventDefault();
            grecaptcha.ready(function() {
                grecaptcha.execute('6LcYJmsrAAAAAOY9kCzOhrjPZjhHyLSQT9V1JXkr', {action: 'login'}).then(function(token) {
                    document.getElementById('recaptchaResponse').value = token;
                    e.target.submit();
                });
            });
        });
    </script>
</body>
</html>