
<?php
session_start();

$server_mysql_vendas = "localhost";
$user_mysql_vendas = "financeiro";
$pass_mysql_vendas = "asder123Ww@";
$db_mysql_vendas = "financeiro";

$conn_mysql_vendas = new mysqli($server_mysql_vendas, $user_mysql_vendas, $pass_mysql_vendas, $db_mysql_vendas);
if ($conn_mysql_vendas->connect_error) {
    die("Conexão MySQL falhou: " . $conn_mysql_vendas->connect_error);
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'clear_values') {
    $sql_clear_values = "UPDATE clientes SET valor = NULL";
    if ($conn_mysql_vendas->query($sql_clear_values) === TRUE) {
        echo json_encode(['status' => 'success', 'message' => 'Valores da coluna valor apagados com sucesso.']);
    } else {
        echo json_encode(['status' => 'error', 'message' => 'Erro ao apagar os valores: ' . $conn_mysql_vendas->error]);
    }
}

// Conectando ao banco de dados MySQL
$conn_mysql_vendas = new mysqli($server_mysql_vendas, $user_mysql_vendas, $pass_mysql_vendas, $db_mysql_vendas);
if ($conn_mysql_vendas->connect_error) {
    die("Conexão MySQL falhou: " . $conn_mysql_vendas->connect_error);
}

// Consultas para obter total de vendas e número de vendas
$sql_total_vendas = "SELECT SUM(valor) as total FROM vendas";
$sql_count_vendas = "SELECT COUNT(*) as total_vendas FROM vendas";
$result_total_vendas = $conn_mysql_vendas->query($sql_total_vendas);
$result_count_vendas = $conn_mysql_vendas->query($sql_count_vendas);

$total = $result_total_vendas ? $result_total_vendas->fetch_assoc()['total'] : 0;
$total_vendas = $result_count_vendas ? $result_count_vendas->fetch_assoc()['total_vendas'] : 0;

// Conectar ao banco de dados SQLite
$db_sqlite = new SQLite3("./api/.ansdb.db");

// Lógica de pesquisa
$search_term = '';
if (isset($_POST['search'])) {
    $search_term = trim($_POST['search']);
}

// Consulta para obter todos os MACs, títulos, número de telefone e DNS, com base na pesquisa
$sql_macs = "SELECT mac_address, title, numero_tel, expire_date FROM ibo WHERE title LIKE :search_term OR mac_address LIKE :search_term OR numero_tel LIKE :search_term";
$stmt = $db_sqlite->prepare($sql_macs);
$stmt->bindValue(':search_term', "%$search_term%", SQLITE3_TEXT);
$result_macs = $stmt->execute();

$macs = [];
while ($row = $result_macs->fetchArray(SQLITE3_ASSOC)) {
    $macs[] = $row;
}


// Consulta para obter todos os MACs com data de expiração e número de telefone
$sql_macs = "SELECT mac_address, title, numero_tel, expire_date FROM ibo";
$result_macs = $db_sqlite->query($sql_macs);

$macs = [];
while ($row = $result_macs->fetchArray(SQLITE3_ASSOC)) {
    $macs[] = $row;
}

$db_sqlite->close();
$conn_mysql_vendas->close();

// Conectar ao banco de dados SQLite
$db_sqlite = new SQLite3("./api/.ansdb.db");

// Função para enviar mensagem pelo WhatsApp para o número específico
function enviarMensagemWhatsApp() {
    $access_token = 'EAAGD8beTNXEBO9ZBMvMYKg91hW78o6ifiYB92mgPIwxjQnOo48yEKx6ChvGQeT7WiONgoQo7xGOUn3OiF7dzzlqJFc2UZBwvYyVr18IlyGySHr8JxJhPi0q6ODTBqhWspoqPUWJfegidxlLqrcTGrEGHtxChwKnArrOZAuhDJ9ojQBoFvtccAo7XFIKNcTyZChaZC7U8Ng0IBUQvZCfAWwhp8k4PUZD';
    $numero_destino = '5511954993501';
    $dados = [
        'messaging_product' => 'whatsapp',
        'recipient_type' => 'individual',
        'to' => $numero_destino,
        'type' => 'template',
        'template' => [
            'name' => 'hello_world',
            'language' => [
                'code' => 'en_US'
            ]
        ]
    ];

    $curl = curl_init();
    curl_setopt_array($curl, [
        CURLOPT_URL => 'https://graph.facebook.com/v21.0/493769300485920/messages',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POSTFIELDS => json_encode($dados),
        CURLOPT_HTTPHEADER => [
            "Content-Type: application/json",
            "Authorization: Bearer " . $access_token
        ],
    ]);

    $response = curl_exec($curl);
    curl_close($curl);
}

// Verificar e enviar mensagem para MACs vencidos
$expired_macs = [];
$active_macs = [];

// Se a requisição for AJAX e a função de envio foi chamada
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['send_messages'])) {
    $sql_macs_vencidos = "SELECT title, numero_tel FROM ibo WHERE expire_date < DATE('now') AND numero_tel IS NOT NULL";
    $result = $db_sqlite->query($sql_macs_vencidos);

    while ($mac = $result->fetchArray(SQLITE3_ASSOC)) {
        $cliente_nome = $mac['title'];
        $numero_destino = '55' . preg_replace('/\D/', '', $mac['numero_tel']);
        enviarMensagemWhatsApp($numero_destino, $cliente_nome);
    }
    
    echo json_encode(['status' => 'success', 'message' => 'Mensagens enviadas com sucesso.']);
    exit();
}

if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['apagar_cliente']) && isset($_POST['cliente_id'])) {
    $cliente_id = intval($_POST['cliente_id']);
    $db = new SQLite3("./api/.ansdb.db");
    $stmt = $db->prepare("DELETE FROM ibo WHERE id = :id");
    $stmt->bindValue(":id", $cliente_id, SQLITE3_INTEGER);
    $stmt->execute();
    $db->close();
    exit();
}


// Criando a conexão com o banco de dados MySQL
$conn_mysql_vendas = new mysqli($server_mysql_vendas, $user_mysql_vendas, $pass_mysql_vendas, $db_mysql_vendas);

// Verificando a conexão MySQL
if ($conn_mysql_vendas->connect_error) {
    die("Conexão MySQL falhou: " . $conn_mysql_vendas->connect_error);
}

// Consultas SQL para os dados MySQL
$sql_total_vendas = "SELECT SUM(valor) as total FROM vendas";
$sql_count_vendas = "SELECT COUNT(*) as total_vendas FROM vendas";

// Executando as consultas
$result_total_vendas = $conn_mysql_vendas->query($sql_total_vendas);
$result_count_vendas = $conn_mysql_vendas->query($sql_count_vendas);

// Inicializando as variáveis
$total = 0;
$total_vendas = 0;

// Verificando os resultados das consultas
if ($result_total_vendas && $row_total = $result_total_vendas->fetch_assoc()) {
    $total = $row_total['total'];
}

if ($result_count_vendas && $row_count = $result_count_vendas->fetch_assoc()) {
    $total_vendas = $row_count['total_vendas'];
}

// Lógica para inserir o valor da venda
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['valor_venda'])) {
    $valor_venda = $_POST['valor_venda'];

    // Verificando se o valor da venda é maior que zero
    if ($valor_venda > 0) {
        // Inserindo o valor da venda na tabela de vendas
        $sql_insert_venda = "INSERT INTO vendas (valor, data) VALUES (?, NOW())"; // 'data' é a data atual

        if ($stmt = $conn_mysql_vendas->prepare($sql_insert_venda)) {
            $stmt->bind_param("d", $valor_venda); // 'd' para decimal
            if ($stmt->execute()) {
                // Verifica e remove o último registro duplicado
                $sql_delete_last_duplicate = "
                    DELETE FROM vendas 
                    WHERE id = (
                        SELECT id FROM (SELECT id FROM vendas ORDER BY id DESC LIMIT 1) AS last_id
                    ) 
                    AND (
                        SELECT COUNT(*) FROM vendas WHERE valor = ? 
                    ) > 1
                ";

                if ($delete_stmt = $conn_mysql_vendas->prepare($sql_delete_last_duplicate)) {
                    $delete_stmt->bind_param("d", $valor_venda);
                    $delete_stmt->execute();
                    $delete_stmt->close();
                }

                echo "<script>alert('Venda inserida com sucesso!');</script>";
            } else {
                echo "<script>alert('Erro ao inserir a venda.');</script>";
            }
            $stmt->close();
        } else {
            echo "<script>alert('Erro na preparação da consulta de inserção.');</script>";
        }
    } else {
        echo "<script>alert('O valor da venda deve ser maior que zero.');</script>";
    }
}

if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['mac_address_m3u']) && isset($_POST['nova_url_m3u'])) {
    $mac_address_m3u = strtoupper(trim($_POST['mac_address_m3u']));
    $nova_url_m3u = trim($_POST['nova_url_m3u']);

    $db_sqlite = new SQLite3("./api/.ansdb.db");

    $stmt = $db_sqlite->prepare("UPDATE ibo SET url = :url WHERE mac_address = :mac_address");
    $stmt->bindValue(':url', $nova_url_m3u, SQLITE3_TEXT);
    $stmt->bindValue(':mac_address', $mac_address_m3u, SQLITE3_TEXT);

    if ($stmt->execute()) {
        echo "<script>alert('URL da lista M3U atualizada com sucesso!');</script>";
    } else {
        echo "<script>alert('Erro ao atualizar a URL da lista M3U.');</script>";
    }

    $db_sqlite->close();
}

// Lógica para alterar a data de expiração (expire_date)
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['mac_address']) && isset($_POST['expire_date'])) {
    $mac_address = strtoupper(trim($_POST['mac_address']));
    $expire_date = $_POST['expire_date'];

    // Conectar ao banco de dados SQLite novamente para realizar a atualização
    $db_sqlite = new SQLite3("./api/.ansdb.db");

    // Atualizar o expire_date para o mac_address fornecido
    $stmt = $db_sqlite->prepare("UPDATE ibo SET expire_date = :expire_date WHERE mac_address = :mac_address");
    $stmt->bindValue(':expire_date', $expire_date, SQLITE3_TEXT);
    $stmt->bindValue(':mac_address', $mac_address, SQLITE3_TEXT);

    $result = $stmt->execute();

    // Fechar o banco de dados
    $db_sqlite->close();

    if ($result) {
        echo "<script>alert('Data de expiração atualizada com sucesso!');</script>";
    } else {
        echo "<script>alert('Falha ao atualizar a data de expiração.');</script>";
    }
}

// Lógica para alterar o título
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['mac_address_title']) && isset($_POST['title'])) {
    $mac_address_title = strtoupper(trim($_POST['mac_address_title']));
    $title = $_POST['title'];

    // Conectar ao banco de dados SQLite para atualizar o title
    $db_sqlite = new SQLite3("./api/.ansdb.db");

    // Atualizar o title para o mac_address fornecido
    $stmt = $db_sqlite->prepare("UPDATE ibo SET title = :title WHERE mac_address = :mac_address");
    $stmt->bindValue(':title', $title, SQLITE3_TEXT);
    $stmt->bindValue(':mac_address', $mac_address_title, SQLITE3_TEXT);

    // Executa a atualização
    $result = $stmt->execute();

    // Fechar o banco de dados
    $db_sqlite->close();

    // Verificar se a atualização foi bem-sucedida
    if ($result) {
        echo "<script>alert('Título atualizado com sucesso!');</script>";
    } else {
        echo "<script>alert('Falha ao atualizar o título.');</script>";
    }
}

// Função para renovar usuário por 30 dias
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['cliente_id'])) {
    $cliente_id = (int)$_POST['cliente_id'];

    if (empty($cliente_id)) {
        echo "ID do cliente não fornecido.";
        exit();
    }

    // Verificar a conexão com o banco de dados
    if (!$db_sqlite) {
        echo "Erro ao conectar ao banco de dados.";
        exit();
    }

    // Nova data de expiração (30 dias a partir de hoje)
    $nova_data_expiracao = date('Y-m-d', strtotime('+30 days'));

    // Preparar e executar a atualização
    $stmt = $db_sqlite->prepare("UPDATE ibo SET expire_date = :expire_date WHERE id = :id");

    $stmt->bindValue(':expire_date', $nova_data_expiracao, SQLITE3_TEXT);
    $stmt->bindValue(':id', $cliente_id, SQLITE3_INTEGER);

    // Executar a consulta
    $result = $stmt->execute();

    if ($result) {
        echo "Usuário renovado com sucesso!";
    } else {
        echo "Erro ao renovar o usuário: " . $db_sqlite->lastErrorMsg();
    }

    $db_sqlite->close();
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['atualizar_whats'])) {
    $cliente_id = intval($_POST['cliente_id_whats']);
    $novo_numero = trim($_POST['novo_phone_number']);

    if (!empty($cliente_id) && !empty($novo_numero)) {
        $db_sqlite = new SQLite3("./api/.ansdb.db");

        // Atualiza o número
        $stmt = $db_sqlite->prepare("UPDATE ibo SET phone_number = :phone_number WHERE id = :id");
        $stmt->bindValue(':phone_number', $novo_numero, SQLITE3_TEXT);
        $stmt->bindValue(':id', $cliente_id, SQLITE3_INTEGER);

        if ($stmt->execute()) {
            echo "<script>alert('Número do WhatsApp atualizado com sucesso!');</script>";
        } else {
            echo "<script>alert('Erro ao atualizar o número do WhatsApp.');</script>";
        }

        $db_sqlite->close();
    }
}

// Lógica para alterar o dns
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['mac_address_dns']) && isset($_POST['dns'])) {
    $mac_address_dns = strtoupper(trim($_POST['mac_address_dns']));
    $dns = $_POST['dns'];

    // Conectar ao banco de dados SQLite para atualizar o dns
    $db_sqlite = new SQLite3("./api/.ansdb.db");

    // Atualizar o dns para o mac_address fornecido
    $stmt = $db_sqlite->prepare("UPDATE ibo SET dns = :dns WHERE mac_address = :mac_address");
    $stmt->bindValue(':dns', $dns, SQLITE3_TEXT);
    $stmt->bindValue(':mac_address', $mac_address_dns, SQLITE3_TEXT);

    // Executa a atualização
    $result = $stmt->execute();

    // Fechar o banco de dados
    $db_sqlite->close();

    // Verificar se a atualização foi bem-sucedida
    if ($result) {
        echo "<script>alert('DNS atualizado com sucesso!');</script>";
    } else {
        echo "<script>alert('Falha ao atualizar o DNS.');</script>";
    }
}
// Fechar a conexão com o banco de dados
$conn_mysql_vendas->close();
?>

<?php
// Conectar ao banco de dados SQLite
$db_sqlite = new SQLite3("./api/.ansdb.db");

// Consulta para contar o número de clientes na tabela ibo
$sql_count_clients = "SELECT COUNT(*) as total_clients FROM ibo";
$result_count_clients = $db_sqlite->query($sql_count_clients);

// Inicializando a variável para o número de clientes
$total_clients = 0;

// Verificando o resultado da consulta
if ($result_count_clients && $row_count_clients = $result_count_clients->fetchArray(SQLITE3_ASSOC)) {
    $total_clients = $row_count_clients['total_clients'];
}

// Fechar a conexão com o banco de dados
$db_sqlite->close();


?>
<?php
ini_set("display_errors", 1);
ini_set("display_startup_errors", 1);
error_reporting(E_ALL);

// Conexão com o banco de dados MySQL
$server_mysql_vendas = "localhost";
$user_mysql_vendas   = "financeiro";
$pass_mysql_vendas   = "asder123Ww@";
$db_mysql_vendas     = "financeiro";

// Criando a conexão com o banco de dados MySQL
$conn_mysql_vendas = new mysqli($server_mysql_vendas, $user_mysql_vendas, $pass_mysql_vendas, $db_mysql_vendas);

// Verificando a conexão MySQL
if ($conn_mysql_vendas->connect_error) {
    die("Conexão MySQL falhou: " . $conn_mysql_vendas->connect_error);
}

// Consulta para somar as vendas do último mês
$sql_total_vendas_ultimo_mes = "SELECT SUM(valor) as total FROM vendas WHERE data >= CURDATE() - INTERVAL 1 MONTH";

// Executando a consulta
$result_total_vendas_ultimo_mes = $conn_mysql_vendas->query($sql_total_vendas_ultimo_mes);

// Inicializando a variável para o total
$total_ultimo_mes = 0;

// Verificando o resultado e atribuindo o valor total
if ($result_total_vendas_ultimo_mes && $row_total = $result_total_vendas_ultimo_mes->fetch_assoc()) {
    $total_ultimo_mes = $row_total['total'];
}

// Fechar a conexão com o banco de dados
$conn_mysql_vendas->close();
?>
<?php
// Caminho do banco de dados SQLite
$db_sqlite_path = "./api/.ansdb.db";

// Conectando ao banco de dados SQLite
$db_sqlite = new SQLite3($db_sqlite_path);

// Consulta para obter os MAC Addresses da tabela 'ibo'
$sql_mac_addresses = "SELECT mac_address FROM ibo";
$result_mac_addresses = $db_sqlite->query($sql_mac_addresses);

// Criando um array para armazenar os MAC Addresses
$mac_addresses = [];
while ($row = $result_mac_addresses->fetchArray(SQLITE3_ASSOC)) {
    $mac_addresses[] = $row['mac_address'];
    
    
}
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['trocar_todos_dns']) && !empty($_POST['novo_inicio_dns'])) {
    $novo_inicio_dns = rtrim($_POST['novo_inicio_dns'], '/') . '/'; // Garante que termina com /

    // Conectando ao banco de dados SQLite
    $db_sqlite = new SQLite3("./api/.ansdb.db");

    // Recuperando todos os registros com DNS atual
    $sql = "SELECT mac_address, dns FROM ibo";
    $result = $db_sqlite->query($sql);

    while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
        $mac_address = strtoupper($row['mac_address']);
        $dns_atual = $row['dns'];

        if (strpos($dns_atual, 'http://opbx.top/') === 0) {
            $restante_url = substr($dns_atual, strlen('http://opbx.top/'));
            $novo_dns = $novo_inicio_dns . $restante_url;

            $stmt = $db_sqlite->prepare("UPDATE ibo SET dns = :dns WHERE mac_address = :mac_address");
            $stmt->bindValue(':dns', $novo_dns, SQLITE3_TEXT);
            $stmt->bindValue(':mac_address', $mac_address, SQLITE3_TEXT);
            $stmt->execute();
        }
    }

    $db_sqlite->close();

    echo "<script>alert('Todos os DNS foram atualizados com sucesso!');</script>";
}


// Lógica para consultar os clientes e contas inativas
// Conectar ao banco de dados SQLite
$db_sqlite = new SQLite3("./api/.ansdb.db");

// Consulta para contar o número de clientes totais
$sql_count_clientes = "SELECT COUNT(*) as total_clientes FROM ibo";
$result_count_clientes = $db_sqlite->query($sql_count_clientes);
$row_count_clientes = $result_count_clientes->fetchArray(SQLITE3_ASSOC);
$total_clientes = $row_count_clientes['total_clientes'];

// Consulta para contar o número de contas inativas (com expire_date inferior a data atual)
$sql_count_inativas = "SELECT COUNT(*) as total_inativas FROM ibo WHERE expire_date < DATE('now')";
$result_count_inativas = $db_sqlite->query($sql_count_inativas);
$row_count_inativas = $result_count_inativas->fetchArray(SQLITE3_ASSOC);
$total_inativas = $row_count_inativas['total_inativas'];

// Fechar a conexão com o banco de dados
$db_sqlite->close();
?>


<?php


// Verificar se o usuário está autenticado e é um administrador
if (!isset($_SESSION['id']) || !$_SESSION['admin']) {
    header("Location: login.php");
    exit();
}



ini_set("display_errors", 1);
ini_set("display_startup_errors", 1);
error_reporting(E_ALL);

// Conectar ao banco de dados SQLite
$db = new SQLite3("./api/.ansdb.db");

// Verificar se a coluna numero_tel já existe
$result = $db->query("PRAGMA table_info(ibo)");
$coluna_existe = false;
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
    if ($row['name'] == 'numero_tel') {
        $coluna_existe = true;
        break;
    }
}

// Adicionar a coluna numero_tel somente se não existir
if (!$coluna_existe) {
    $db->exec("ALTER TABLE ibo ADD COLUMN numero_tel VARCHAR(15)");
}

// Lógica para atualizar o número de telefone
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save_phone'])) {
    $cliente_id = $_POST['cliente_id'];
    $numero_tel = $_POST['numero_tel'];

    // Atualizar o número de telefone na tabela 'ibo'
    $stmt = $db->prepare("UPDATE ibo SET numero_tel = :numero_tel WHERE id = :id");
    $stmt->bindValue(':numero_tel', $numero_tel, SQLITE3_TEXT);
    $stmt->bindValue(':id', $cliente_id, SQLITE3_INTEGER);

    if ($stmt->execute()) {
        echo "<script>alert('Número de telefone salvo com sucesso!');</script>";
    } else {
        echo "<script>alert('Erro ao salvar o número de telefone.');</script>";
    }
}



// Buscar todos os mac_addresses para o select
$res = $db->query("SELECT id, mac_address, title, numero_tel FROM ibo");
$clientes = [];
while ($row = $res->fetchArray()) {
    $clientes[] = $row;
}

// Conexão ao banco de dados SQLite
$db_sqlite = new SQLite3("./api/.ansdb.db");

// Consulta para obter os 5 primeiros MACs com `expire_date` vencida e `numero_tel`
$sql_expired_macs = "SELECT mac_address, title, numero_tel FROM ibo WHERE expire_date ";

$result_expired_macs = $db_sqlite->query($sql_expired_macs);

// Verifica se existem registros com expiração vencida
$expired_macs = [];
while ($row = $result_expired_macs->fetchArray(SQLITE3_ASSOC)) {
    $expired_macs[] = $row;
}


// Ordenar MACs vencidos primeiro
$expired_macs = [];
$active_macs = [];

foreach ($macs as $mac) {
    // Verifica se o MAC está vencido
    $isExpired = isset($mac['expire_date']) && strtotime($mac['expire_date']) < time();
    if ($isExpired) {
        $expired_macs[] = $mac;
    } else {
        $active_macs[] = $mac;
    }
}

// Combine listas com os vencidos primeiro
$sorted_macs = array_merge($expired_macs, $active_macs);

$db_sqlite->close();


$codigo_downloader = "557898";


?>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $db = new SQLite3('./api/.ansdb.db');

    $cliente_id = intval($_POST['cliente_id']);
    $url_m3u = trim($_POST['lista_m3u']);

    // Verifica se a URL é válida
    if (!filter_var($url_m3u, FILTER_VALIDATE_URL)) {
        echo "URL inválida.";
        exit();
    }

    // Extrair dados da URL
    $parsed_url = parse_url($url_m3u);
    parse_str($parsed_url['query'], $query_params);

    $dns = $parsed_url['scheme'] . '://' . $parsed_url['host'];
    $username = $query_params['username'] ?? '';
    $password = $query_params['password'] ?? '';

    if (empty($username) || empty($password)) {
        echo "Username ou password não encontrados na URL.";
        exit();
    }

    $stmt = $db->prepare("UPDATE ibo SET dns = :dns, username = :username, password = :password WHERE id = :id");
    $stmt->bindValue(':dns', $dns, SQLITE3_TEXT);
    $stmt->bindValue(':username', $username, SQLITE3_TEXT);
    $stmt->bindValue(':password', $password, SQLITE3_TEXT);
    $stmt->bindValue(':id', $cliente_id, SQLITE3_INTEGER);

    if ($stmt->execute()) {
        echo "Dados da M3U atualizados com sucesso.";
    } else {
        echo "Erro ao atualizar M3U.";
    }

    $db->close();
}
?>

<!DOCTYPE html>
<html lang="pt-br">
<head>
  <meta charset="UTF-8">
  <title>Lista Completa de Clientes</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
    /* BODY */
    body {
        margin: 0;
        padding: 20px;
        font-family: 'Poppins', sans-serif;
        background-color: #121212;
        color: white;
        overflow-x: hidden; /* Previne overflow horizontal */
    }

    /* TÍTULOS */
    h2 {
        color: #00ffae;
        margin-bottom: 20px;
        text-align: center;
        font-size: 1.8rem;
    }

    /* CONTAINER DE PESQUISA */
    #searchContainer {
        text-align: center;
        margin-bottom: 20px;
    }

    #searchInput {
        padding: 12px;
        font-size: 18px;
        border-radius: 8px;
        border: none;
        width: 80%;
        max-width: 500px;
        margin-top: 10px;
        background-color: #333;
        color: white;
    }

    /* LISTA DE CLIENTES */
    #listaClientes {
        display: flex;
        flex-direction: column;
        gap: 20px;
        max-width: 1000px;
        margin: 0 auto;
    }

    /* CARTÕES DE CLIENTES */
    .card {
        background-color: #1e1e1e;
        border-radius: 12px;
        padding: 20px;
        box-shadow: 0 0 15px rgba(0,0,0,0.3);
        position: relative;
        width: 100%;
        box-sizing: border-box;
        transition: transform 0.3s ease;
    }

    .card:hover {
        transform: translateY(-5px); /* Efeito de hover para cartões */
    }

    .card-header {
        display: flex;
        justify-content: space-between;
        align-items: center;
        flex-wrap: wrap;
    }

    .card-header .nome {
        font-weight: 600;
        font-size: 18px;
        color: #00ffae;
    }

    .botoes {
        display: flex;
        gap: 8px;
        flex-wrap: wrap;
    }

    .botoes button {
        padding: 8px 12px;
        border-radius: 8px;
        border: none;
        color: white;
        cursor: pointer;
        font-size: 16px;
        transition: background-color 0.3s ease;
    }

    .botoes button:hover {
        background-color: #333;
    }

    .editar { background-color: #00c853; }
    .apagar { background-color: #d32f2f; }
    .whats { background-color: #55e617; }
    .renovar { background-color: #00bcd4; }
    .atualiza-m3u { background-color: #ff9800; }
    .atualiza-servidor { background-color: #3f51b5; }
    .ver-m3u { background-color: #9c27b0; }
    .pausar { background-color: #607d8b; }
    .trocar-dns { background-color: #210e2e; }

    /* INFO */
    .info {
        margin-top: 12px;
        font-size: 14px;
        color: #ccc;
    }

    .info strong {
        display: inline-block;
        width: 90px;
        color: #fff;
    }

    /* RESPONSIVO PARA TELA MENOR QUE 768PX */
    @media (max-width: 768px) {
        .card {
            padding: 15px;
        }

        .card-header {
            flex-direction: column;
            align-items: flex-start;
            gap: 10px;
        }

        .botoes {
            width: 100%;
            justify-content: flex-start;
        }

        .botoes button {
            flex: 1 1 auto;
            font-size: 14px;
        }
    }

    /* RESPONSIVO PARA CELULAR (480PX) */
    @media (max-width: 480px) {
        .card {
            padding: 10px;
        }

        .card-header .nome {
            font-size: 14px;
        }

        .botoes button {
            font-size: 12px;
            padding: 6px 8px;
        }

        .info {
            font-size: 12px;
        }
    }

    /* TOOLBAR */
    .toolbar {
        background-color: #121212;
        padding: 14px 20px;
        display: flex;
        align-items: center;
        justify-content: space-between;
        color: white;
        position: sticky;
        top: 0;
        z-index: 999;
        box-shadow: 0 2px 5px rgba(0,0,0,0.3);
    }

    .toolbar-left,
    .toolbar-right {
        width: 100px;
        display: flex;
        align-items: center;
        justify-content: flex-start;
    }

    .toolbar-right {
        justify-content: flex-end;
    }

    .btn-toolbar {
        background-color: #00ffae;
        border: none;
        padding: 8px 14px;
        border-radius: 8px;
        color: black;
        font-weight: bold;
        cursor: pointer;
        font-size: 16px;
        transition: background-color 0.3s ease;
    }

    .btn-toolbar:hover {
        background-color: #00c853;
    }

    .toolbar-title {
        flex: 1;
        text-align: center;
        font-size: 18px;
        font-weight: bold;
        color: #00ffae;
    }

    /* RESPONSIVO PARA MOBILE */
    @media (max-width: 480px) {
        .toolbar {
            flex-direction: column;
            gap: 8px;
            text-align: center;
        }

        .toolbar-left,
        .toolbar-right {
            width: auto;
            justify-content: center;
        }

        .toolbar-title {
            font-size: 16px;
        }
    }

    /* MODAL */
    .modal {
        display: none;
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.7);
        z-index: 1000;
        justify-content: center;
        align-items: center;
    }

    .modal-content {
        background-color: #1e1e1e;
        border-radius: 12px;
        padding: 20px;
        text-align: center;
        box-shadow: 0 0 15px rgba(0, 0, 0, 0.3);
        width: 90%;
        max-width: 400px;
        color: white;
    }

    .close {
        position: absolute;
        top: 10px;
        right: 10px;
        color: white;
        font-size: 24px;
        font-weight: bold;
        cursor: pointer;
    }

    .modal-content h3 {
        margin-bottom: 20px;
        font-size: 1.5rem;
        color: #00ffae;
    }

    /* BOTÃO DE COPIAR */
    .copy-btn {
        background-color: #00ffae;
        border: none;
        padding: 10px 20px;
        color: black;
        font-size: 1rem;
        font-weight: bold;
        border-radius: 8px;
        cursor: pointer;
        transition: background-color 0.3s ease;
    }

    .copy-btn:hover {
        background-color: #00c853;
    }

    /* RESPONSIVO PARA O MODAL */
    @media (max-width: 480px) {
        .modal-content {
            padding: 15px;
        }

        .modal-content h3 {
            font-size: 1.2rem;
        }

        .copy-btn {
            font-size: 0.9rem;
            padding: 8px 16px;
        }
    }
</style>
<style>
    .pagination {
        display: flex;
        justify-content: center;
        align-items: center;
        margin-top: 20px;
    }

    .pagination a {
        background-color: #007bff;
        color: white;
        padding: 10px 20px;
        text-decoration: none;
        border-radius: 5px;
        margin: 0 5px;
        font-size: 16px;
        transition: background-color 0.3s;
    }

    .pagination a:hover {
        background-color: #0056b3;
    }

    .pagination a:disabled {
        background-color: #cccccc;
        cursor: not-allowed;
    }

    .pagination .page-info {
        font-size: 16px;
        margin: 0 10px;
        color: #333;
    }

    .pagination .page-info strong {
        color: #007bff;
    }
</style>

</head>
<body>
    <div class="toolbar">
    <button class="btn-toolbar" onclick="window.location.href='sport.php'">🏠 Início</button>
    
</div>

<h2>📋 Clientes</h2>

<!-- Campo de busca -->
<div id="searchContainer">
    <input type="text" id="searchInput" placeholder="🔍 Pesquisar Cliente..." onkeyup="searchClientes()">
</div>

<div id="listaClientes">
    <?php
    $db = new SQLite3("./api/.ansdb.db");

    // Consulta para pegar todos os clientes
    $result = $db->query("SELECT id, title, mac_address, expire_date, numero_tel, dns, type FROM ibo 
                          ORDER BY 
                              CASE 
                                  WHEN title = 'NOVO*** (TESTE CADASTRADO)' OR title = 'Teste' THEN 1
                                  ELSE 2
                              END, 
                              expire_date ASC");

    // Mostrar os resultados
    while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
        $cliente_id = $row['id'];
        $nome = htmlspecialchars($row['title']);
        $mac = htmlspecialchars($row['mac_address']);
        $expira = htmlspecialchars($row['expire_date']);
        $telefone = htmlspecialchars($row['numero_tel']);
        $dns = htmlspecialchars($row['dns']);
        $type = htmlspecialchars($row['type']);

        // Calcular dias restantes
        $data_expiracao = new DateTime($expira);
        $data_atual = new DateTime();
        $intervalo = $data_atual->diff($data_expiracao);
        $dias_restantes = $intervalo->format('%r%a'); // 'r' retorna se a diferença é positiva ou negativa, e 'a' é o número de dias

        echo '<div class="card" data-nome="' . $nome . '" data-mac="' . $mac . '" data-telefone="' . $telefone . '">';
        echo '<div class="card-header">';
        echo '<div class="nome">👤 ' . $nome . '</div>';
        echo '<div class="botoes">';
        echo '<button class="whats" onclick="whats(' . $cliente_id . ')">
                <img src="https://img.icons8.com/?size=100&id=16713&format=png&color=000000" alt="WhatsApp" width="24" height="24">
              </button>';
        echo '<button class="apagar" onclick="apagarCliente(' . $cliente_id . ')">🗑️</button>';
        echo '<button class="whats" onclick="abrirModalEditarWhats(' . $cliente_id . ', \'' . addslashes($nome) . '\', \'' . addslashes($telefone) . '\')">✏️</button>';
        echo '<button class="renovar" onclick="renovarUsuario(' . $cliente_id . ')">🔄</button>';
        echo '<button class="atualiza-m3u" onclick="atualizarM3U(' . $cliente_id . ')">🔁 M3U</button>';
        echo '<button class="ver-m3u" onclick="verM3U(' . $cliente_id . ')">📺 Ver M3U</button>';
        echo '<button class="trocar-dns" onclick="trocarDNS(' . $cliente_id . ', \'' . $dns . '\')">🌐 Trocar DNS</button>';
        echo '<button class="pausar" id="pausar_' . $cliente_id . '" onclick="atualizarBotaoPausar(' . $cliente_id . ', \'' . $type . '\')">⏸️ Pausar</button>';
        echo '</div>';
        echo '</div>';
        
        echo '<div class="info" style="display: flex; justify-content: space-between;">
                <div><strong>📅 Expira:</strong> <span style="color:#ffa726;">' . $expira . '</span></div>
                <div><strong>⏳ Restam:</strong> <span style="color:#ff5722;">' . $dias_restantes . ' dias</span></div>
              </div>';
        
        echo '<div class="info"><strong>🔐 MAC:</strong> <span style="color:#bbb;">' . $mac . '</span></div>';
        echo '<div class="info"><strong>📞 Tel:</strong> <span id="tel_' . $cliente_id . '" style="color:#81d4fa;">' . $telefone . '</span></div>';
        echo '</div>';
    }

    $db->close();
    ?>
</div>


<!-- Modal para exibir a URL M3U -->
<div id="modalM3U" class="modal">
    <div class="modal-content">
        <span class="close" onclick="fecharModal()">&times;</span>
        <h3>URL da M3U</h3>
        <p id="m3uUrlText">Carregando...</p>
        <button class="copy-btn" onclick="copiarM3U()">📋 Copiar URL</button>
    </div>
</div>
<div id="modalEditarWhats" class="modal-telefone">
  <h3>Editar WhatsApp de <span id="nomeClienteWhatsModal"></span></h3>
  <form method="POST">
    <input type="hidden" name="cliente_id_whats" id="clienteIdWhatsInput">
    <input type="text" name="novo_phone_number" id="novoPhoneNumberInput" placeholder="Novo número">
    <button type="submit" name="atualizar_whats" class="btn-salvar">Salvar</button>
    <button type="button" onclick="fecharModalEditarWhats()" class="btn-cancelar">Cancelar</button>
  </form>
</div>
<script>
// Função de pesquisa em tempo real
function searchClientes() {
    let input = document.getElementById("searchInput");
    let filter = input.value.toLowerCase();
    let cards = document.querySelectorAll(".card");

    cards.forEach(function(card) {
        let nome = card.getAttribute("data-nome").toLowerCase();
        let mac = card.getAttribute("data-mac").toLowerCase().replace(/:/g, ''); // Remove os dois pontos do MAC
        let telefone = card.getAttribute("data-telefone").toLowerCase();

        if (nome.indexOf(filter) > -1 || mac.indexOf(filter) > -1 || telefone.indexOf(filter) > -1) {
            card.style.display = "";
        } else {
            card.style.display = "none";
        }
    });
}

function abrirModalEditarWhats(id, nome, telefone) {
  document.getElementById('clienteIdWhatsInput').value = id;
  document.getElementById('nomeClienteWhatsModal').textContent = nome;
  document.getElementById('novoPhoneNumberInput').value = telefone || '';
  document.getElementById('modalEditarWhats').style.display = 'block';
}

function fecharModalEditarWhats() {
  document.getElementById('modalEditarWhats').style.display = 'none';
}
</script>


<style>
.modal-telefone {
  display: none;
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: #1e1e1e;
  padding: 20px;
  border-radius: 10px;
  z-index: 9999;
  color: white;
  max-width: 90vw;
  width: 100%;
  box-sizing: border-box;
  font-family: 'Poppins', sans-serif;
  text-align: center;
}

.modal-telefone h3 {
  font-size: 18px;
  margin-bottom: 15px;
}

.modal-telefone input,
.modal-telefone button {
  width: 100%;
  box-sizing: border-box;
  padding: 10px;
  margin-top: 10px;
  border-radius: 6px;
  font-size: 15px;
  border: none;
}

.modal-telefone input {
  background-color: #333;
  color: white;
}

.modal-telefone .btn-salvar {
  background-color: #00ffae;
  color: #000;
  font-weight: bold;
  cursor: pointer;
}

.modal-telefone .btn-cancelar {
  background-color: gray;
  color: white;
  cursor: pointer;
}

/* Responsivo */
@media (max-width: 480px) {
  .modal-telefone {
    padding: 15px;
  }
  .modal-telefone h3 {
    font-size: 16px;
  }
  .modal-telefone input,
  .modal-telefone button {
    font-size: 14px;
  }
}
</style>

<script>

function abrirEditarModal(id, nome, telefone) {
    document.getElementById("clienteIdInput").value = id;
    document.getElementById("numeroTelInput").value = telefone;
    document.getElementById("nomeClienteModal").textContent = nome;
    document.getElementById("modalEditarTelefone").style.display = 'block';
    document.getElementById("fundoModal").style.display = 'block';
}

function fecharModalEditar() {
    document.getElementById("modalEditarTelefone").style.display = 'none';
    document.getElementById("fundoModal").style.display = 'none';
}
// Função para trocar o DNS do cliente
function trocarDNS(clienteId, currentDNS) {
    // Pergunta o novo DNS ao usuário
    const novoDNS = prompt("Digite o novo DNS:", currentDNS);

    if (novoDNS !== null && novoDNS.trim() !== "") {
        // Envia o novo DNS para o servidor via POST
        const xhr = new XMLHttpRequest();
        xhr.open('POST', 'trocar_dns.php', true);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.onload = function () {
            if (xhr.status === 200) {
                alert('DNS alterado com sucesso!');
                location.reload(); // Atualiza a página para refletir a mudança
            } else {
                alert('Erro ao alterar o DNS.');
            }
        };
        xhr.send('cliente_id=' + clienteId + '&novo_dns=' + encodeURIComponent(novoDNS));
    }
}

// Função para alternar entre Pausar e Ativar
function pausarCliente(clienteId, currentType) {
    const action = (currentType === 'ativo') ? 'pausar' : 'ativar';

    // Enviar requisição para alterar o tipo no banco de dados
    const xhr = new XMLHttpRequest();
    xhr.open('POST', 'alterar_status.php', true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.onload = function() {
        if (xhr.status === 200) {
            alert('Tipo alterado com sucesso!');
            location.reload(); // Atualizar a página para refletir a mudança
        } else {
            alert('Erro ao alterar o tipo.');
        }
    };
    xhr.send('cliente_id=' + clienteId + '&action=' + action);
}

// Função para atualizar o botão conforme o tipo
function atualizarBotaoPausar(clienteId, typeAtual) {
    const button = document.querySelector('#pausar_' + clienteId);
    if (typeAtual === 'ativo') {
        button.textContent = '⏸️ Pausar';
        button.onclick = function() { pausarCliente(clienteId, 'ativo'); };
    } else {
        button.textContent = '▶️ Ativar';
        button.onclick = function() { pausarCliente(clienteId, 'pausado'); };
    }
}

// Função para abrir o modal e exibir a URL M3U
function verM3U(clienteId) {
    // Solicitar a URL M3U do cliente
    const xhr = new XMLHttpRequest();
    xhr.open('POST', 'buscar_m3u.php', true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.onload = function () {
        if (xhr.status === 200) {
            const m3uUrl = xhr.responseText;
            // Atualizar o conteúdo do modal com a URL da M3U
            document.getElementById('m3uUrlText').textContent = m3uUrl;
            // Mostrar o modal
            document.getElementById('modalM3U').style.display = 'flex';
        } else {
            alert('Erro ao buscar URL M3U');
        }
    };
    xhr.send('cliente_id=' + clienteId);
}

// Função para fechar o modal
function fecharModal() {
    document.getElementById('modalM3U').style.display = 'none';
}

// Função para copiar a URL da M3U para a área de transferência
function copiarM3U() {
    const m3uUrl = document.getElementById('m3uUrlText').textContent;
    navigator.clipboard.writeText(m3uUrl).then(function () {
        alert('URL copiada para a área de transferência!');
    }).catch(function (err) {
        alert('Erro ao copiar URL: ' + err);
    });
}

// Fechar o modal quando clicar fora do conteúdo do modal
window.addEventListener('click', function(event) {
    const modal = document.getElementById('modalM3U');
    const modalContent = document.querySelector('.modal-content');
    if (event.target === modal) {
        fecharModal();
    }
});
</script>


  <script>
    function renovarUsuario(clienteId) {
      if (confirm("Deseja renovar o cliente por +30 dias?")) {
        const xhr = new XMLHttpRequest();
        xhr.open('POST', 'renovar_usuario.php', true);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.onload = function () {
          alert(xhr.responseText);
          location.reload();
        };
        xhr.send('cliente_id=' + clienteId);
      }
    }

    function whats(clienteId) {
      const telefone = document.getElementById('tel_' + clienteId)?.textContent || '';
      if (telefone) {
        const link = 'https://wa.me/55' + telefone.replace(/\D/g, '');
        window.open(link, '_blank');
      } else {
        alert('Telefone não encontrado.');
      }
    }

    function apagarCliente(id) {
    if (confirm("Tem certeza que deseja apagar este cliente?")) {
        const formData = new FormData();
        formData.append("apagar_cliente", 1);
        formData.append("cliente_id", id);

        fetch("", {
            method: "POST",
            body: formData
        }).then(resp => resp.text())
          .then(data => {
              alert("Cliente removido!");
              location.reload();
          }).catch(err => {
              alert("Erro ao apagar o cliente.");
              console.error(err);
          });
    }
}

   

  function atualizarM3U(clienteId) {
  const listaM3U = prompt("Cole aqui a URL completa da lista M3U:");

  if (!listaM3U) return;

  const xhr = new XMLHttpRequest();
  xhr.open('POST', 'atualizar_m3u.php', true);
  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xhr.onload = function () {
    alert(xhr.responseText);
    location.reload();
  };
  xhr.send('cliente_id=' + clienteId + '&lista_m3u=' + encodeURIComponent(listaM3U));
}


  </script>
</body>
</html>

