<?php
session_start();

// Configurações do banco do MKAUTH
$host = "localhost";
$user = "root";
$pass = "vertrigo";
$dbname = "mkradius";
$port = 3306;

try {
    $conn = new PDO("mysql:host=$host;port=$port;dbname=$dbname", $user, $pass);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    $conn->exec("set names utf8");
} catch(PDOException $e) {
    die("Erro na conexão: " . $e->getMessage());
}

// Guardar a página de origem para redirecionamento posterior
$origem = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

// Processar o formulário se for uma requisição POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Recebe os dados do formulário
    $nome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_STRING);
    $celular = filter_input(INPUT_POST, 'celular', FILTER_SANITIZE_STRING);
    $nascimento = filter_input(INPUT_POST, 'nascimento', FILTER_SANITIZE_STRING);
    $senha = "brasil"; // Senha fixa para todos os usuários
    
    // Captura a página de origem se enviada no formulário
    $origem = filter_input(INPUT_POST, 'origem', FILTER_SANITIZE_URL);
    if (empty($origem)) {
        // Se não tiver origem, usa o HTTP_REFERER
        $origem = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
    }

    // Formata a data de nascimento para o formato do banco (se necessário)
    $nascimento_formatado = date("d/m/Y", strtotime($nascimento));

    // Limpar formatação do celular (remover parênteses, espaços e hífen)
    $celular_limpo = preg_replace('/[^0-9]/', '', $celular);
    
    // Verifica se celular já existe
    $stmt = $conn->prepare("SELECT id FROM sis_cliente WHERE celular = :celular OR login = :login");
    $stmt->bindParam(':celular', $celular);
    $stmt->bindParam(':login', $celular_limpo);
    $stmt->execute();

    if($stmt->rowCount() > 0){
       $_SESSION['msg'] = "Este número de celular já está cadastrado! Por favor use outro número.";
       header("Location: " . $_SERVER['PHP_SELF']);
       exit();
    }

    try {
        // Limpar formatação do celular (remover parênteses, espaços e hífen)
        $celular_limpo = preg_replace('/[^0-9]/', '', $celular);
        
        // Verificar se é um número de celular válido (começa com DDD e o primeiro dígito após DDD é 9)
        if (strlen($celular_limpo) != 11 || $celular_limpo[2] != '9') {
            $_SESSION['msg'] = "Número de celular inválido! Digite um número de celular válido.";
            header("Location: " . $_SERVER['PHP_SELF']);
            exit();
        }
        
        $conn->beginTransaction();
       
        // Gerar UUID único para o cliente
        $uuid_cliente = sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', 
            mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), 
            mt_rand(16384, 20479), mt_rand(32768, 49151), 
            mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));

        // Inserir cliente com campos essenciais
        $sql_cliente = "INSERT INTO sis_cliente (
            nome, celular, nascimento, login, senha, tipo, bloqueado, 
            plano, cli_ativado, cadastro, nome_res, responsavel,
            pessoa, venc, isento, estado, uuid_cliente
        ) VALUES (
            :nome, :celular, :nascimento, :login, :senha, 'hotspot', 'nao',
            '100mega', 's', DATE_FORMAT(NOW(), '%d/%m/%Y'), :nome, :nome,
            'fisica', '05', 'sim', 'GO', :uuid_cliente
        )";

        $stmt = $conn->prepare($sql_cliente);
        $stmt->bindParam(':nome', $nome);
        $stmt->bindParam(':celular', $celular);
        $stmt->bindParam(':nascimento', $nascimento_formatado);
        $stmt->bindParam(':login', $celular_limpo); // Usar o número limpo para login
        $stmt->bindParam(':senha', $senha);
        $stmt->bindParam(':uuid_cliente', $uuid_cliente);
        $stmt->execute();
       
        // Inserção radcheck
        $stmt = $conn->prepare("INSERT INTO radcheck (username, attribute, op, value) 
                                VALUES (:username, 'Cleartext-Password', ':=', :senha)");
        $stmt->bindParam(':username', $celular_limpo);
        $stmt->bindParam(':senha', $senha);
        $stmt->execute();

        // Inserção radusergroup
        $stmt = $conn->prepare("INSERT INTO radusergroup (username, groupname) 
                                VALUES (:username, '100mega')");
        $stmt->bindParam(':username', $celular_limpo);
        $stmt->execute();

        $conn->commit();
       
        // Redireciona de volta para a página de origem
        if (!empty($origem)) {
            header("Location: " . $origem);
        } else {
            // Se não houver destino, volta para a página inicial
            header("Location: /");
        }
        exit();

    } catch(PDOException $e) {
        $conn->rollBack();
        $_SESSION['msg'] = "Erro ao cadastrar: " . $e->getMessage();
        header("Location: " . $_SERVER['PHP_SELF']);
        exit();
    }
}
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cadastro de Usuário</title>
    <style>
        a,body,div,form,html,input,label,p,span {
            margin: 0;
            padding: 0;
            border: 0;
            font-family: sans-serif,Arial;
        }

        body {
            background: linear-gradient(135deg,hsla(236.6,0%,53.52%,1) 0,hsla(236.6,0%,53.52%,0) 70%),
                        linear-gradient(25deg,hsla(220.75,34.93%,26.52%,1) 10%,hsla(220.75,34.93%,26.52%,0) 80%),
                        linear-gradient(315deg,hsla(46.42,36.62%,83.92%,1) 15%,hsla(46.42,36.62%,83.92%,0) 80%),
                        linear-gradient(245deg,hsla(191.32,50.68%,56.45%,1) 100%,hsla(191.32,50.68%,56.45%,0) 70%);
            min-height: 100vh;
            display: flex;
            flex-direction: column;
        }

        .main {
            display: flex;
            flex-direction: column;
            flex: 1;
        }

        h1 {
            text-align: center;
            color: #fff;
            font-size: 24px;
            margin-bottom: 20px;
        }

        * {
            box-sizing: border-box;
            font-size: 16px;
        }

        .wrap {
            margin: auto;
            padding: 40px;
            width: 100%;
            max-width: 410px;
            animation: fadeIn 1s;
        }

        form {
            width: 100%;
            margin-bottom: 20px;
        }

        .info {
            color: #fff;
            text-align: center;
            margin-bottom: 30px;
            width: 90%;
            margin: 0 auto;
        }

        .info p {
            line-height: 1.5;
        }

        input {
            outline: 0;
            appearance: none;
        }

        input[type=password],
        input[type=text],
        input[type=tel],
        input[type=date] {
            width: 100%;
            border: 1px solid rgba(255,255,255,.8);
            height: 44px;
            padding: 3px 20px;
            margin-bottom: 20px;
            border-radius: 6px;
            background-color: rgba(255,255,255,.8);
        }

        input[type=hidden] {
            display: none;
            margin: 0;
            height: 0;
        }

        input[type=submit] {
            background: #3e4d59;
            color: #fff;
            border: 0;
            cursor: pointer;
            text-align: center;
            width: 100%;
            height: 44px;
            border-radius: 6px;
            transition: background .3s ease-in-out;
        }

        input[type=submit]:hover {
            background: #33404a;
        }

        .info.alert {
            color: #da3d41;
        }

        @keyframes fadeIn {
            from { opacity: 0; }
            to { opacity: 1; }
        }
    </style>
</head>
<body>
    <div class="main">
        <div class="wrap">
            <h1>Novo Cadastro</h1>
            
            <?php
            if(isset($_SESSION['msg'])){
                echo '<p class="info alert">'.$_SESSION['msg'].'</p>';
                unset($_SESSION['msg']);
            }
            ?>
            
            <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>" autocomplete="off">
                <label>
                    <input type="text" name="nome" placeholder="Nome Completo" required 
                           pattern="[A-Za-záàâãéèêíïóôõöúçñÁÀÂÃÉÈÍÏÓÔÕÖÚÇÑ ]+$" 
                           title="Digite seu nome completo (apenas letras)">
                </label>
                
                <label>
                    <input type="tel" name="celular" id="celular" placeholder="Seu celular (DDD + número)" required
                           pattern="\([0-9]{2}\) [9][0-9]{4}-[0-9]{4}" 
                           maxlength="16"
                           title="Digite um número de celular válido no formato (99) 99999-9999">
                </label>
                
                <label>
                    <input type="date" name="nascimento" placeholder="Data de nascimento" required
                           title="Selecione sua data de nascimento">
                </label>
                
                <!-- Campo oculto para armazenar a página de origem -->
                <input type="hidden" name="origem" value="<?php echo htmlspecialchars($origem); ?>">
                
                <input type="submit" value="Cadastrar">
            </form>

            <div class="info">
                <p>Preencha todos os campos para realizar seu cadastro</p>
                <p>O celular deve ser um número válido no formato (99) 99999-9999</p>
            </div>
        </div>
    </div>
    
    <script>
        // Função para aplicar máscara ao campo de celular
        document.addEventListener('DOMContentLoaded', function() {
            const celularInput = document.getElementById('celular');
            
            celularInput.addEventListener('input', function(e) {
                let value = e.target.value.replace(/\D/g, '');
                
                if (value.length > 0) {
                    // Formata o número conforme vai digitando
                    if (value.length <= 2) {
                        value = '(' + value;
                    } else if (value.length <= 7) {
                        value = '(' + value.substring(0, 2) + ') ' + value.substring(2);
                    } else if (value.length <= 11) {
                        value = '(' + value.substring(0, 2) + ') ' + value.substring(2, 7) + '-' + value.substring(7);
                    } else {
                        value = '(' + value.substring(0, 2) + ') ' + value.substring(2, 7) + '-' + value.substring(7, 11);
                    }
                }
                
                e.target.value = value;
            });
            
            // Validação para garantir que o número começa com 9 após o DDD
            celularInput.addEventListener('blur', function(e) {
                const numericValue = e.target.value.replace(/\D/g, '');
                
                if (numericValue.length === 11) {
                    // Verifica se o primeiro dígito após o DDD é 9
                    if (numericValue[2] !== '9') {
                        alert('O número de celular deve começar com 9 após o DDD.');
                        e.target.value = '';
                    }
                } else if (numericValue.length > 0) {
                    alert('Digite um número de celular válido com 11 dígitos (DDD + 9 dígitos).');
                    e.target.value = '';
                }
            });
        });
    </script>
</body>
</html>