<?php
/**
 * Sistema de Login/Cadastro/Recuperação Completo
 * Checkout Pro 2025
 */

session_start();

// Verifica se o usuário já está logado
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] === true) {
    if (isset($_SESSION['usuario_tipo']) && $_SESSION['usuario_tipo'] === 'admin') {
        header("Location: /dashboard/index.php?page=dashboard");
    } else {
        header("Location: /dashboard/usuario.php");
    }
    exit;
}

// Conexão com o banco de dados
if(file_exists(__DIR__ . '/../config/config_db.php')) {
    require __DIR__ . '/../config/config_db.php';
} else {
    $pdo = null; 
}

// Incluir helper de autenticação
require_once __DIR__ . '/../backend/auth_helper.php';

// Incluir helper de settings para carregar logo
require_once __DIR__ . '/../backend/settings_helper.php';

$error = '';
$success = '';
$activeTab = 'login'; // login, cadastro, recuperar

// Carregar logo do sistema (mesma usada na sidebar admin)
$logo_login = getSystemSetting('logo_sidebar_admin', '');
// Garantir caminho correto - remover espaços e garantir barra inicial
if (!empty($logo_login)) {
    $logo_login = trim($logo_login);
    // Se não começar com /, adicionar (exceto se for URL completa)
    if (!filter_var($logo_login, FILTER_VALIDATE_URL) && strpos($logo_login, '/') !== 0) {
        $logo_login = '/' . ltrim($logo_login, '/');
    }
}

// Processar formulários
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $action = $_POST['action'] ?? 'login';
    
    switch ($action) {
        case 'login':
            // LOGIN
            $email = trim($_POST['email'] ?? '');
            $password = trim($_POST['password'] ?? '');
            
            if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                $error = "Por favor, insira um email válido.";
                $activeTab = 'login';
            } else {
                if ($pdo) {
                    try {
                        $stmt = $pdo->prepare("SELECT id, nome, email, senha_hash, tipo, status FROM usuarios WHERE email = :email LIMIT 1");
                        $stmt->execute([':email' => $email]);
                        $user = $stmt->fetch(PDO::FETCH_ASSOC);
                        
                        if ($user) {
                            if (!empty($user['senha_hash']) && trim($user['senha_hash']) !== '') {
                                if (password_verify($password, $user['senha_hash'])) {
                                    $status_usuario = isset($user['status']) ? $user['status'] : 'ativo';
                                    if ($status_usuario !== 'ativo') {
                                        $error = "Sua conta está bloqueada. Entre em contato com o administrador.";
                                    } else {
                                        fazer_login([
                                            'id' => $user['id'],
                                            'nome' => $user['nome'] ?? 'Usuário',
                                            'email' => $user['email'],
                                            'tipo' => $user['tipo'] ?? 'usuario',
                                            'status' => $status_usuario
                                        ]);
                                        
                                        if (eh_admin()) {
                                            header("Location: /dashboard/index.php?page=dashboard");
                                        } else {
                                            header("Location: /dashboard/usuario.php");
                                        }
                                        exit;
                                    }
                                } else {
                                    $error = "Email ou senha inválidos.";
                                }
                            } else {
                                $error = "Usuário sem senha configurada. Entre em contato com o administrador.";
                            }
                        } else {
                            $error = "Email ou senha inválidos.";
                        }
                    } catch (PDOException $e) {
                        error_log("Erro no login: " . $e->getMessage());
                        $error = "Erro ao processar login. Tente novamente.";
                    }
                } else {
                    $error = "Erro de conexão com banco de dados.";
                }
            }
            break;
            
        case 'cadastro':
            // CADASTRO
            $nome = trim($_POST['nome'] ?? '');
            $email = trim($_POST['email'] ?? '');
            $whatsapp = trim($_POST['whatsapp'] ?? '');
            $senha = trim($_POST['senha'] ?? '');
            $confirmar_senha = trim($_POST['confirmar_senha'] ?? '');
            
            // Validações
            if (empty($nome) || strlen($nome) < 3) {
                $error = "Nome completo deve ter pelo menos 3 caracteres.";
                $activeTab = 'cadastro';
            } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                $error = "Por favor, insira um email válido.";
                $activeTab = 'cadastro';
            } elseif (empty($whatsapp) || strlen($whatsapp) < 10) {
                $error = "WhatsApp inválido. Digite um número válido.";
                $activeTab = 'cadastro';
            } elseif (strlen($senha) < 6) {
                $error = "A senha deve ter pelo menos 6 caracteres.";
                $activeTab = 'cadastro';
            } elseif ($senha !== $confirmar_senha) {
                $error = "As senhas não coincidem.";
                $activeTab = 'cadastro';
            } else {
                if ($pdo) {
                    try {
                        // Verificar se email já existe
                        $stmt = $pdo->prepare("SELECT id FROM usuarios WHERE email = :email LIMIT 1");
                        $stmt->execute([':email' => $email]);
                        if ($stmt->fetch()) {
                            $error = "Este email já está cadastrado. Faça login ou use outro email.";
                            $activeTab = 'cadastro';
                        } else {
                            // Criar usuário
                            $senha_hash = password_hash($senha, PASSWORD_DEFAULT);
                            
                            // Limpar WhatsApp (remover caracteres não numéricos)
                            $whatsapp_limpo = preg_replace('/[^0-9]/', '', $whatsapp);
                            
                            // Verificar se coluna whatsapp existe
                            try {
                                $stmt = $pdo->prepare("INSERT INTO usuarios (nome, email, whatsapp, senha_hash, tipo, status, created_at, updated_at) VALUES (?, ?, ?, ?, 'usuario', 'ativo', NOW(), NOW())");
                                $stmt->execute([$nome, $email, $whatsapp_limpo, $senha_hash]);
                            } catch (PDOException $e) {
                                // Se coluna whatsapp não existir, inserir sem ela
                                if (strpos($e->getMessage(), 'whatsapp') !== false) {
                                    $stmt = $pdo->prepare("INSERT INTO usuarios (nome, email, senha_hash, tipo, status, created_at, updated_at) VALUES (?, ?, ?, 'usuario', 'ativo', NOW(), NOW())");
                                    $stmt->execute([$nome, $email, $senha_hash]);
                                } else {
                                    throw $e;
                                }
                            }
                            
                            // Fazer login automaticamente
                            $user_id = $pdo->lastInsertId();
                            fazer_login([
                                'id' => $user_id,
                                'nome' => $nome,
                                'email' => $email,
                                'tipo' => 'usuario',
                                'status' => 'ativo'
                            ]);
                            
                            header("Location: /dashboard/usuario.php");
                            exit;
                        }
                    } catch (PDOException $e) {
                        error_log("Erro no cadastro: " . $e->getMessage());
                        $error = "Erro ao criar conta. Tente novamente.";
                        $activeTab = 'cadastro';
                    }
                } else {
                    $error = "Erro de conexão com banco de dados.";
                    $activeTab = 'cadastro';
                }
            }
            break;
            
        case 'recuperar':
            // RECUPERAÇÃO DE SENHA
            $email_recuperar = trim($_POST['email_recuperar'] ?? '');
            
            if (!filter_var($email_recuperar, FILTER_VALIDATE_EMAIL)) {
                $error = "Por favor, insira um email válido.";
                $activeTab = 'recuperar';
            } else {
                if ($pdo) {
                    try {
                        $stmt = $pdo->prepare("SELECT id, nome FROM usuarios WHERE email = :email LIMIT 1");
                        $stmt->execute([':email' => $email_recuperar]);
                        $user = $stmt->fetch(PDO::FETCH_ASSOC);
                        
                        if ($user) {
                            // Gerar token de recuperação
                            $token = bin2hex(random_bytes(32));
                            $expira = date('Y-m-d H:i:s', strtotime('+1 hour'));
                            
                            // Salvar token (criar tabela se não existir)
                            try {
                                $pdo->exec("CREATE TABLE IF NOT EXISTS recuperacao_senha (
                                    id INT AUTO_INCREMENT PRIMARY KEY,
                                    usuario_id INT NOT NULL,
                                    token VARCHAR(64) NOT NULL,
                                    expira DATETIME NOT NULL,
                                    usado TINYINT(1) DEFAULT 0,
                                    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                                    INDEX idx_token (token),
                                    INDEX idx_usuario (usuario_id)
                                )");
                                
                                $stmt_token = $pdo->prepare("INSERT INTO recuperacao_senha (usuario_id, token, expira) VALUES (?, ?, ?)");
                                $stmt_token->execute([$user['id'], $token, $expira]);
                                
                                $success = "Instruções de recuperação foram enviadas para seu email!";
                                $activeTab = 'recuperar';
                            } catch (PDOException $e) {
                                error_log("Erro ao criar token: " . $e->getMessage());
                                $error = "Erro ao processar recuperação. Tente novamente.";
                                $activeTab = 'recuperar';
                            }
                        } else {
                            // Por segurança, não revelar se o email existe ou não
                            $success = "Se o email estiver cadastrado, você receberá instruções de recuperação.";
                            $activeTab = 'recuperar';
                        }
                    } catch (PDOException $e) {
                        error_log("Erro na recuperação: " . $e->getMessage());
                        $error = "Erro ao processar recuperação. Tente novamente.";
                        $activeTab = 'recuperar';
                    }
                } else {
                    $error = "Erro de conexão com banco de dados.";
                    $activeTab = 'recuperar';
                }
            }
            break;
            
        case 'nova_senha':
            // DEFINIR NOVA SENHA (após clicar no link de recuperação)
            $token = $_POST['token'] ?? '';
            $nova_senha = trim($_POST['nova_senha'] ?? '');
            $confirmar_nova_senha = trim($_POST['confirmar_nova_senha'] ?? '');
            
            if (strlen($nova_senha) < 6) {
                $error = "A senha deve ter pelo menos 6 caracteres.";
            } elseif ($nova_senha !== $confirmar_nova_senha) {
                $error = "As senhas não coincidem.";
            } else {
                if ($pdo) {
                    try {
                        $stmt = $pdo->prepare("SELECT usuario_id, expira, usado FROM recuperacao_senha WHERE token = :token AND usado = 0 LIMIT 1");
                        $stmt->execute([':token' => $token]);
                        $recuperacao = $stmt->fetch(PDO::FETCH_ASSOC);
                        
                        if ($recuperacao) {
                            if (strtotime($recuperacao['expira']) > time()) {
                                $senha_hash = password_hash($nova_senha, PASSWORD_DEFAULT);
                                $stmt_update = $pdo->prepare("UPDATE usuarios SET senha_hash = ? WHERE id = ?");
                                $stmt_update->execute([$senha_hash, $recuperacao['usuario_id']]);
                                
                                $stmt_marcar = $pdo->prepare("UPDATE recuperacao_senha SET usado = 1 WHERE token = ?");
                                $stmt_marcar->execute([$token]);
                                
                                $success = "Senha alterada com sucesso! Você pode fazer login agora.";
                                $activeTab = 'login';
                            } else {
                                $error = "Link de recuperação expirado. Solicite um novo.";
                            }
                        } else {
                            $error = "Link de recuperação inválido ou já utilizado.";
                        }
                    } catch (PDOException $e) {
                        error_log("Erro ao definir nova senha: " . $e->getMessage());
                        $error = "Erro ao alterar senha. Tente novamente.";
                    }
                }
            }
            break;
    }
}

// Verificar se há token na URL (recuperação de senha)
$token_url = $_GET['token'] ?? '';
if (!empty($token_url)) {
    $activeTab = 'nova_senha';
}
?>

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login | Checkout Pro</title>
    
    <!-- Carregar configurações White Label (CSS dinâmico com variáveis) -->
    <?php 
    if (isset($pdo)) {
        require_once __DIR__ . '/includes/load_settings.php'; 
    }
    ?>
    
    <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700;800&display=swap">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    
    <style>
        * { margin: 0; padding: 0; box-sizing: border-box; }
        
        body {
            font-family: 'Montserrat', sans-serif;
            min-height: 100vh;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            background: var(--bg-sidebar, #020617) !important;
            background-image: 
                radial-gradient(circle at 50% 0%, rgba(30, 27, 75, 0.3) 0%, transparent 70%),
                linear-gradient(rgba(255, 255, 255, 0.02) 1px, transparent 1px),
                linear-gradient(90deg, rgba(255, 255, 255, 0.02) 1px, transparent 1px);
            background-size: 100% 100%, 40px 40px, 40px 40px;
            color: #fff;
            padding: 20px;
        }
        
        .brand-title {
            font-size: 3rem;
            font-weight: 800;
            text-transform: uppercase;
            letter-spacing: 4px;
            margin-bottom: 40px;
            text-align: center;
            background: linear-gradient(to right, #4f46e5, #06b6d4);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            filter: drop-shadow(0 0 15px rgba(79, 70, 229, 0.4));
            animation: fadeInDown 1s ease-out;
        }
        
        .login-wrapper {
            position: relative;
            width: 100%;
            max-width: 450px;
            border-radius: 20px;
            overflow: hidden;
            box-shadow: 0 0 50px rgba(0, 0, 0, 0.5);
            animation: fadeInUp 1s ease-out;
        }
        
        .login-wrapper::before {
            content: '';
            position: absolute;
            top: -50%;
            left: -50%;
            width: 200%;
            height: 200%;
            background: conic-gradient(transparent, transparent, transparent, #4f46e5, #06b6d4);
            animation: rotate-border 4s linear infinite;
        }
        
        .login-wrapper::after {
            content: '';
            position: absolute;
            top: -50%;
            left: -50%;
            width: 200%;
            height: 200%;
            background: conic-gradient(transparent, transparent, transparent, #06b6d4, #4f46e5);
            animation: rotate-border 4s linear infinite;
            animation-delay: -2s;
        }
        
        .login-content {
            position: relative;
            background: rgba(15, 23, 42, 0.95);
            backdrop-filter: blur(10px);
            inset: 3px;
            border-radius: 18px;
            padding: 40px 30px;
            z-index: 10;
        }
        
        .tabs {
            display: flex;
            gap: 10px;
            margin-bottom: 30px;
            border-bottom: 2px solid rgba(255, 255, 255, 0.1);
        }
        
        .tab-btn {
            flex: 1;
            padding: 12px;
            background: transparent;
            border: none;
            color: rgba(255, 255, 255, 0.6);
            font-weight: 600;
            cursor: pointer;
            border-bottom: 2px solid transparent;
            transition: all 0.3s;
            font-size: 14px;
        }
        
        .tab-btn.active {
            color: #06b6d4;
            border-bottom-color: #06b6d4;
        }
        
        .tab-content {
            display: none;
        }
        
        .tab-content.active {
            display: block;
        }
        
        .input-group {
            position: relative;
            margin-bottom: 20px;
        }
        
        .input-group i {
            position: absolute;
            left: 15px;
            top: 50%;
            transform: translateY(-50%);
            color: #64748b;
            font-size: 18px;
        }
        
        .login-content input {
            width: 100%;
            padding: 15px 15px 15px 45px;
            background: rgba(255, 255, 255, 0.03);
            border: 1px solid rgba(255, 255, 255, 0.1);
            border-radius: 10px;
            color: #fff;
            font-size: 15px;
            outline: none;
            transition: all 0.3s;
            font-family: 'Montserrat', sans-serif;
        }
        
        .login-content input::placeholder { color: #475569; }
        
        .login-content input:focus {
            border-color: #06b6d4;
            background: rgba(6, 182, 212, 0.05);
            box-shadow: 0 0 15px rgba(6, 182, 212, 0.1);
        }
        
        .login-content input:focus + i { color: #06b6d4; }
        
        .btn-submit {
            width: 100%;
            padding: 15px;
            background: linear-gradient(90deg, #4f46e5, #4338ca);
            color: white;
            border: none;
            border-radius: 10px;
            font-size: 16px;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 1px;
            cursor: pointer;
            transition: 0.3s;
            box-shadow: 0 5px 15px rgba(79, 70, 229, 0.3);
            margin-top: 10px;
        }
        
        .btn-submit:hover {
            transform: translateY(-2px);
            box-shadow: 0 8px 25px rgba(79, 70, 229, 0.5);
        }
        
        .msg {
            padding: 12px;
            border-radius: 8px;
            text-align: center;
            font-size: 14px;
            margin-bottom: 20px;
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 8px;
        }
        
        .msg.error {
            background: rgba(239, 68, 68, 0.1);
            color: #f87171;
            border: 1px solid rgba(239, 68, 68, 0.2);
        }
        
        .msg.success {
            background: rgba(16, 185, 129, 0.1);
            color: #34d399;
            border: 1px solid rgba(16, 185, 129, 0.2);
        }
        
        .link-recuperar {
            text-align: center;
            margin-top: 15px;
        }
        
        .link-recuperar a {
            color: #06b6d4;
            text-decoration: none;
            font-size: 13px;
        }
        
        .link-recuperar a:hover {
            text-decoration: underline;
        }
        
        @keyframes rotate-border {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }
        
        @keyframes fadeInDown {
            from { opacity: 0; transform: translateY(-30px); }
            to { opacity: 1; transform: translateY(0); }
        }
        
        @keyframes fadeInUp {
            from { opacity: 0; transform: translateY(30px); }
            to { opacity: 1; transform: translateY(0); }
        }
        
        @media (max-width: 480px) {
            .brand-title { font-size: 2rem; }
            .login-wrapper { width: 100%; }
        }
    </style>
</head>
<body>
    <?php if (!empty($logo_login)): ?>
        <img src="<?= htmlspecialchars($logo_login, ENT_QUOTES, 'UTF-8'); ?>" alt="Logo" style="max-width: 220px; height: auto; display: block; margin: 0 auto 20px auto; filter: drop-shadow(0 0 15px rgba(79, 70, 229, 0.4)); animation: fadeInDown 1s ease-out;">
    <?php else: ?>
        <div class="brand-title">Checkout Pro</div>
    <?php endif; ?>
    
    <div class="login-wrapper">
        <div class="login-content">
            <div class="tabs">
                <button class="tab-btn <?= $activeTab === 'login' ? 'active' : '' ?>" onclick="showTab('login')">
                    <i class="fas fa-sign-in-alt"></i> Login
                </button>
                <button class="tab-btn <?= $activeTab === 'cadastro' ? 'active' : '' ?>" onclick="showTab('cadastro')">
                    <i class="fas fa-user-plus"></i> Cadastro
                </button>
                <button class="tab-btn <?= in_array($activeTab, ['recuperar', 'nova_senha']) ? 'active' : '' ?>" onclick="showTab('recuperar')">
                    <i class="fas fa-key"></i> Recuperar
                </button>
            </div>
            
            <?php if ($error): ?>
                <div class="msg error">
                    <i class="fas fa-exclamation-circle"></i>
                    <?= htmlspecialchars($error) ?>
                </div>
            <?php endif; ?>
            
            <?php if ($success): ?>
                <div class="msg success">
                    <i class="fas fa-check-circle"></i>
                    <?= htmlspecialchars($success) ?>
                </div>
            <?php endif; ?>
            
            <!-- TAB LOGIN -->
            <div id="tab-login" class="tab-content <?= $activeTab === 'login' ? 'active' : '' ?>">
                <form method="POST">
                    <input type="hidden" name="action" value="login">
                    <div class="input-group">
                        <input type="email" name="email" placeholder="Seu email" required autocomplete="email">
                        <i class="fas fa-envelope"></i>
                    </div>
                    <div class="input-group">
                        <input type="password" name="password" placeholder="Sua senha" required autocomplete="current-password">
                        <i class="fas fa-lock"></i>
                    </div>
                    <button type="submit" class="btn-submit">
                        Entrar <i class="fas fa-arrow-right" style="margin-left: 8px;"></i>
                    </button>
                    <div class="link-recuperar">
                        <a href="#" onclick="event.preventDefault(); showTab('recuperar');">Esqueceu sua senha?</a>
                    </div>
                </form>
            </div>
            
            <!-- TAB CADASTRO -->
            <div id="tab-cadastro" class="tab-content <?= $activeTab === 'cadastro' ? 'active' : '' ?>">
                <form method="POST">
                    <input type="hidden" name="action" value="cadastro">
                    <div class="input-group">
                        <input type="text" name="nome" placeholder="Nome completo" required autocomplete="name">
                        <i class="fas fa-user"></i>
                    </div>
                    <div class="input-group">
                        <input type="email" name="email" placeholder="Seu email" required autocomplete="email">
                        <i class="fas fa-envelope"></i>
                    </div>
                    <div class="input-group">
                        <input type="text" name="whatsapp" placeholder="WhatsApp (ex: 11999999999)" required>
                        <i class="fas fa-phone"></i>
                    </div>
                    <div class="input-group">
                        <input type="password" name="senha" placeholder="Senha (mínimo 6 caracteres)" required minlength="6" autocomplete="new-password">
                        <i class="fas fa-lock"></i>
                    </div>
                    <div class="input-group">
                        <input type="password" name="confirmar_senha" placeholder="Confirmar senha" required minlength="6" autocomplete="new-password">
                        <i class="fas fa-lock"></i>
                    </div>
                    <button type="submit" class="btn-submit">
                        Criar Conta <i class="fas fa-user-plus" style="margin-left: 8px;"></i>
                    </button>
                </form>
            </div>
            
            <!-- TAB RECUPERAR -->
            <div id="tab-recuperar" class="tab-content <?= in_array($activeTab, ['recuperar', 'nova_senha']) ? 'active' : '' ?>">
                <?php if (!empty($token_url) || $activeTab === 'nova_senha'): ?>
                    <!-- Formulário para definir nova senha -->
                    <form method="POST">
                        <input type="hidden" name="action" value="nova_senha">
                        <input type="hidden" name="token" value="<?= htmlspecialchars($token_url ?: ($_POST['token'] ?? '')) ?>">
                        <div class="input-group">
                            <input type="password" name="nova_senha" placeholder="Nova senha (mínimo 6 caracteres)" required minlength="6" autocomplete="new-password">
                            <i class="fas fa-lock"></i>
                        </div>
                        <div class="input-group">
                            <input type="password" name="confirmar_nova_senha" placeholder="Confirmar nova senha" required minlength="6" autocomplete="new-password">
                            <i class="fas fa-lock"></i>
                        </div>
                        <button type="submit" class="btn-submit">
                            Alterar Senha <i class="fas fa-key" style="margin-left: 8px;"></i>
                        </button>
                    </form>
                <?php else: ?>
                    <!-- Formulário para solicitar recuperação -->
                    <form method="POST">
                        <input type="hidden" name="action" value="recuperar">
                        <div class="input-group">
                            <input type="email" name="email_recuperar" placeholder="Digite seu email" required autocomplete="email">
                            <i class="fas fa-envelope"></i>
                        </div>
                        <button type="submit" class="btn-submit">
                            Enviar Link de Recuperação <i class="fas fa-paper-plane" style="margin-left: 8px;"></i>
                        </button>
                        <div class="link-recuperar">
                            <a href="#" onclick="event.preventDefault(); showTab('login');">Voltar para login</a>
                        </div>
                    </form>
                <?php endif; ?>
            </div>
        </div>
    </div>
    
    <script>
        function showTab(tab) {
            // Esconder todas as tabs
            document.querySelectorAll('.tab-content').forEach(content => {
                content.classList.remove('active');
            });
            document.querySelectorAll('.tab-btn').forEach(btn => {
                btn.classList.remove('active');
            });
            
            // Mostrar tab selecionada
            document.getElementById('tab-' + tab).classList.add('active');
            event.target.closest('.tab-btn').classList.add('active');
        }
        
        // Máscara para WhatsApp
        document.querySelector('input[name="whatsapp"]')?.addEventListener('input', function(e) {
            let value = e.target.value.replace(/\D/g, '');
            e.target.value = value;
        });
    </script>
</body>
</html>

