<?php 
// ATIVA DEBUG
error_reporting(E_ALL);
ini_set('display_errors', 1);

// 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);
}

// Inicia sessão apenas se não estiver iniciada
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

// DEBUG
error_log("=== DEBUG LOGIN ===");
error_log("SESSION status: " . session_status());
error_log("REQUEST METHOD: " . $_SERVER['REQUEST_METHOD']);

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

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

// Variável para armazenar email de forma segura
$email_login = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    error_log("=== PROCESSANDO POST ===");
    
    // ReCAPTCHA
    $recaptchaResponse = $_POST['g-recaptcha-response'] ?? '';
    $secretKey = '6LcYJmsrAAAAAFDotKvET0VhSgvu1LVUF_Z6rbeh';
    
    error_log("reCAPTCHA Response recebido: " . ($recaptchaResponse ? 'SIM' : 'NÃO'));
    
    if (empty($recaptchaResponse) || $recaptchaResponse === 'recaptcha_error_fallback') {
        error_log("Token reCAPTCHA vazio ou fallback");
        $recaptcha_valido = true;
    } else {
        $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),
                'timeout' => 5
            ]
        ];
        
        $context = stream_context_create($options);
        
        try {
            $result = @file_get_contents($url, false, $context);
            
            if ($result === FALSE) {
                error_log("Falha na comunicação com reCAPTCHA - usando fallback");
                $recaptcha_valido = true;
            } else {
                $response = json_decode($result);
                
                if (!$response || !isset($response->success)) {
                    error_log("Resposta inválida do reCAPTCHA - usando fallback");
                    $recaptcha_valido = true;
                } elseif (!$response->success) {
                    $errors = $response->{'error-codes'} ?? ['desconhecido'];
                    error_log("Erros reCAPTCHA: " . implode(', ', $errors));
                    
                    if (in_array('timeout-or-duplicate', $errors)) {
                        $erro = 'A verificação de segurança expirou. Por favor, recarregue a página e tente novamente.';
                    } elseif (in_array('missing-input-response', $errors)) {
                        $erro = 'Verificação de segurança não completada.';
                    } else {
                        $erro = 'Falha na verificação de segurança.';
                    }
                } elseif ($response->score < 0.3) {
                    error_log("Score baixo: " . $response->score);
                    $erro = 'Atividade suspeita detectada. Tente novamente.';
                } else {
                    error_log("reCAPTCHA VÁLIDO - Score: " . $response->score);
                    $recaptcha_valido = true;
                }
            }
        } catch (Exception $e) {
            error_log("EXCEÇÃO reCAPTCHA: " . $e->getMessage());
            $recaptcha_valido = true;
        }
    }
    
    if ((isset($recaptcha_valido) && $recaptcha_valido) && empty($erro)) {
        // Usa um nome diferente para evitar conflitos
        $email_input = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
        $senha = $_POST['senha'] ?? '';
        
        // Armazena em variável segura
        $email_login = $email_input;

        error_log("Email recebido: $email_input");

        if (empty($email_input) || empty($senha)) {
            $erro = 'Por favor, preencha todos os campos.';
        } elseif (!filter_var($email_input, FILTER_VALIDATE_EMAIL)) {
            $erro = 'Formato de e-mail inválido.';
        } else {
            $stmt = $conn->prepare("
                SELECT 
                    u.id, 
                    u.nome, 
                    u.senha, 
                    u.permissao, 
                    u.ativo, 
                    u.tenant_id,
                    u.foto_perfil,
                    t.ativo as tenant_ativo,
                    t.nome as tenant_nome,
                    t.data_fim as tenant_data_fim,
                    p.codigo as plano_codigo
                FROM usuarios u 
                LEFT JOIN tenants t ON u.tenant_id = t.id 
                LEFT JOIN planos p ON t.plano_id = p.id
                WHERE u.email = ?
            ");
            
            if (!$stmt) {
                error_log("ERRO na query: " . $conn->error);
                $erro = 'Erro interno no sistema.';
            } else {
                $stmt->bind_param("s", $email_input);
                $stmt->execute();
                $resultado = $stmt->get_result();

                error_log("Usuários encontrados: " . $resultado->num_rows);

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

                    error_log("Usuário encontrado: " . $usuario['nome']);

                    // ========== VERIFICAÇÃO DE TESTE EXpirado ==========
                    if ($usuario['plano_codigo'] === 'teste') {
                        $teste_expirado = false;
                        $motivo = '';
                        
                        if ($usuario['tenant_data_fim'] && strtotime($usuario['tenant_data_fim']) < time()) {
                            $teste_expirado = true;
                            $motivo = 'data_expirada';
                        }
                        
                        if ($usuario['tenant_ativo'] != 1) {
                            $teste_expirado = true;
                            $motivo = 'tenant_inativo';
                        }
                        
                        if ($usuario['ativo'] != 'sim') {
                            $teste_expirado = true;
                            $motivo = 'usuario_inativo';
                        }
                        
                        if ($teste_expirado) {
                            error_log("🔴 TESTE EXpirado detectado - Motivo: $motivo");
                            
                            if ($usuario['tenant_ativo'] == 1) {
                                $stmt_bloqueio = $conn->prepare("UPDATE tenants SET ativo = 0 WHERE id = ?");
                                $stmt_bloqueio->bind_param("i", $usuario['tenant_id']);
                                $stmt_bloqueio->execute();
                                $stmt_bloqueio->close();
                            }
                            
                            if ($usuario['ativo'] == 'sim') {
                                $stmt_usuarios = $conn->prepare("UPDATE usuarios SET ativo = 'nao' WHERE tenant_id = ?");
                                $stmt_usuarios->bind_param("i", $usuario['tenant_id']);
                                $stmt_usuarios->execute();
                                $stmt_usuarios->close();
                            }
                            
                            $stmt->close();
                            $conn->close();
                            
                            // Redireciona SEMPRE para teste_expirado.php
                            header('Location: teste_expirado.php?tenant=' . $usuario['tenant_id'] . '&motivo=' . $motivo);
                            exit;
                        }
                    }
                    // ========== FIM VERIFICAÇÃO DE TESTE EXpirado ==========

                    if (password_verify($senha, $usuario['senha'])) {
                        error_log("Senha válida!");
                        
                        if ($usuario['ativo'] === 'sim') {
                            if ($usuario['tenant_ativo'] != 1) {
                                $erro = 'Este tenant está inativo. Entre em contato com o administrador do sistema.';
                            } else {
                                if ($usuario['plano_codigo'] === 'teste') {
                                    error_log("Usuário de TESTE detectado");
                                    
                                    if ($usuario['tenant_data_fim'] && strtotime($usuario['tenant_data_fim']) < time()) {
                                        error_log("Teste EXPIRADO");
                                        
                                        $stmt_bloqueio = $conn->prepare("UPDATE tenants SET ativo = 0 WHERE id = ?");
                                        $stmt_bloqueio->bind_param("i", $usuario['tenant_id']);
                                        $stmt_bloqueio->execute();
                                        $stmt_bloqueio->close();
                                        
                                        $stmt_usuarios = $conn->prepare("UPDATE usuarios SET ativo = 'nao' WHERE tenant_id = ?");
                                        $stmt_usuarios->bind_param("i", $usuario['tenant_id']);
                                        $stmt_usuarios->execute();
                                        $stmt_usuarios->close();
                                        
                                        $stmt->close();
                                        $conn->close();
                                        header('Location: teste_expirado.php?tenant=' . $usuario['tenant_id']);
                                        exit;
                                    }
                                    
                                    if (!function_exists('verificarAcessoUsuario')) {
                                        error_log("AVISO: função verificarAcessoUsuario não encontrada");
                                    } elseif (!verificarAcessoUsuario($usuario['id'])) {
                                        error_log("Acesso BLOQUEADO para usuário: " . $usuario['id']);
                                        $erro = 'Seu acesso está temporariamente bloqueado.';
                                        $stmt->close();
                                        $conn->close();
                                        header('Location: teste_expirado.php?tenant=' . $usuario['tenant_id']);
                                        exit;
                                    }
                                }

                                // Regenera ID da sessão
                                if (session_status() === PHP_SESSION_ACTIVE) {
                                    session_regenerate_id(true);
                                }

                                // Armazena o email do usuário em uma variável segura
                                $email_usuario = !empty($email_login) ? $email_login : $usuario['email'];
                                
                                // Define estrutura da sessão
                                $_SESSION['logado'] = true;
                                $_SESSION['usuario'] = [
                                    'id' => $usuario['id'],
                                    'nome' => $usuario['nome'],
                                    'email' => $email_usuario,
                                    'permissao' => strtolower($usuario['permissao']),
                                    'tenant_id' => $usuario['tenant_id'],
                                    'tenant_nome' => $usuario['tenant_nome'],
                                    'tenant_ativo' => $usuario['tenant_ativo'],
                                    'foto_perfil' => $usuario['foto_perfil'],
                                    'plano_codigo' => $usuario['plano_codigo']
                                ];

                                // Campos avulsos opcionais
                                $_SESSION['usuario_id'] = $usuario['id'];
                                $_SESSION['nome_usuario'] = $usuario['nome'];
                                $_SESSION['email_usuario'] = $email_usuario;
                                $_SESSION['permissao'] = strtolower($usuario['permissao']);
                                $_SESSION['tenant_id'] = $usuario['tenant_id'];
                                $_SESSION['foto_perfil'] = $usuario['foto_perfil'];
                                $_SESSION['tenant_nome'] = $usuario['tenant_nome'];
                                $_SESSION['tenant_ativo'] = $usuario['tenant_ativo'];
                                $_SESSION['plano_codigo'] = $usuario['plano_codigo'];

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

                                // Atualiza último login
                                $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();

                                // Log usando variável segura
                                error_log("LOGIN BEM-SUCEDIDO para: " . $email_usuario);
                                
                                $stmt->close();
                                $conn->close();
                                
                                // Redireciona
                                if ($usuario['plano_codigo'] === 'teste') {
                                    header('Location: index.php?teste=ativo');
                                } else {
                                    header('Location: index.php');
                                }
                                exit;
                            }
                        } else {
                            error_log("Usuário INATIVO");
                            $stmt->close();
                            header('Location: acesso_negado.php?motivo=conta_inativa');
                            exit;
                        }
                    } else {
                        error_log("Senha INVÁLIDA");
                        $stmt->close();
                        sleep(2);
                        $erro = 'Credenciais inválidas.';
                    }
                } else {
                    error_log("Usuário NÃO ENCONTRADO");
                    $stmt->close();
                    sleep(2);
                    $erro = 'Credenciais inválidas.';
                }
            }
        }
    }
    
    error_log("Erro final: " . $erro);
}

if (isset($conn)) {
    $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;
        }
        .teste-link {
            text-align: center;
            margin-top: 15px;
            padding: 10px;
            background-color: #e8f4fc;
            border-radius: 4px;
        }
        .teste-link a {
            color: #3498db;
            text-decoration: none;
            font-weight: bold;
        }
        .teste-link a:hover {
            text-decoration: underline;
        }
        .debug-info {
            font-size: 11px;
            color: #666;
            background: #f0f0f0;
            padding: 5px;
            border-radius: 3px;
            margin-top: 10px;
            text-align: center;
        }
        /* Estilos para o campo de senha com olho */
        .password-wrapper {
            position: relative;
            width: 100%;
        }
        .password-wrapper input {
            width: 100%;
            padding-right: 40px;
        }
        .toggle-password {
            position: absolute;
            right: 10px;
            top: 50%;
            transform: translateY(-50%);
            background: none;
            border: none;
            cursor: pointer;
            color: #666;
            padding: 5px;
            font-size: 16px;
        }
        .toggle-password:hover {
            color: #333;
        }
    </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>
            <div class="debug-info">
                <?php 
                if (strpos($erro, 'reCAPTCHA') !== false || strpos($erro, 'segurança') !== false) {
                    echo '<strong>Informação:</strong> Sistema de segurança ativo.';
                }
                ?>
            </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>
                <div class="password-wrapper">
                    <input type="password" id="senha" name="senha" required minlength="8" />
                    <button type="button" class="toggle-password" id="togglePassword">
                        👁️
                    </button>
                </div>
            </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="teste-link">
                <a href="cadastro_teste_sistema.php">Teste o sistema gratuitamente por 10 dias</a>
            </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>
        console.log("Inicializando reCAPTCHA...");
        
        // Função para mostrar/ocultar senha
        document.addEventListener('DOMContentLoaded', function() {
            // Configuração do olho da senha
            const togglePassword = document.getElementById('togglePassword');
            const passwordInput = document.getElementById('senha');
            
            if (togglePassword && passwordInput) {
                togglePassword.addEventListener('click', function() {
                    const type = passwordInput.getAttribute('type') === 'password' ? 'text' : 'password';
                    passwordInput.setAttribute('type', type);
                    
                    // Altera o ícone do olho
                    this.textContent = type === 'password' ? '👁️' : '👁️‍🗨️';
                });
            }
            
            // Configuração do reCAPTCHA
            grecaptcha.ready(function() {
                console.log("reCAPTCHA pronto, gerando token inicial...");
                grecaptcha.execute('6LcYJmsrAAAAAOY9kCzOhrjPZjhHyLSQT9V1JXkr', {action: 'login'}).then(function(token) {
                    console.log("Token gerado (primeiros 20 chars):", token.substring(0, 20) + "...");
                    document.getElementById('recaptchaResponse').value = token;
                }).catch(function(error) {
                    console.error("Erro ao gerar token reCAPTCHA:", error);
                    document.getElementById('recaptchaResponse').value = 'recaptcha_error_fallback';
                });
            });
        });
        
        document.getElementById('loginForm').addEventListener('submit', function(e) {
            console.log("Formulário submetido, regenerando token...");
            e.preventDefault();
            
            grecaptcha.ready(function() {
                grecaptcha.execute('6LcYJmsrAAAAAOY9kCzOhrjPZjhHyLSQT9V1JXkr', {action: 'login'}).then(function(token) {
                    console.log("Novo token gerado (primeiros 20 chars):", token.substring(0, 20) + "...");
                    document.getElementById('recaptchaResponse').value = token;
                    console.log("Enviando formulário...");
                    
                    setTimeout(function() {
                        e.target.submit();
                    }, 100);
                    
                }).catch(function(error) {
                    console.error("Erro ao regenerar token:", error);
                    document.getElementById('recaptchaResponse').value = 'recaptcha_error_fallback';
                    
                    setTimeout(function() {
                        e.target.submit();
                    }, 100);
                });
            });
        });
    </script>
</body>
</html>