<?php

ini_set("display_errors", 0);
ini_set("display_startup_errors", 0);
error_reporting(32767);
session_start();

$db = new SQLite3(".ansdb.db");

// Definir os links DNS (6 links como exemplo)
$dns_links = [
    'http://area51.tr9.xyz:80', // Primeiro DNS
    // Segundo DNS
];

// Definir os 6 diferentes usernames e senhas
$user_credentials = [
    ['username' => 'thefulltv', 'password' => 'thefulltv8571'],
    ['username' => 'thefulltv1', 'password' => 'thefulltv8571'],
    ['username' => 'thefulltv2', 'password' => 'lcantvbox8571'],
    ['username' => 'thefulltv3', 'password' => '074069686'],
    ['username' => 'thefulltv4', 'password' => '547476362'],
    ['username' => 'thefulltv5', 'password' => '947182392'],
];

// Definir dados fixos ou pegar de uma fonte externa para a atualização
$default_data = [
    'key' => '136115',
    'title' => 'Cliente Atualizado',  // Isso também não será atualizado
    'url' => 'http://example.com/stream.m3u',
    'type' => '0',  // Ou outro tipo conforme necessário
    'playlistpassword' => '',
    'id_user' => 1,  // Exemplo: id_user pode ser 1 ou outro
    'active' => 1     // 1 para ativo, 'NULL' para desativado
];

// Loop para atualizar os registros
for ($id = 1; $id <= 200; $id++) {
    // Buscar dados do ID atual
    $res = $db->query("SELECT * FROM ibo WHERE id = '$id'");
    $row = $res->fetchArray();
    
    if ($row) {
        // Verificar se o valor da coluna `title` é exatamente "NOVO*** (TESTE CADASTRADO)"
        if (isset($row['title']) && $row['title'] === 'NOVO*** (TESTE CADASTRADO)') {
            // Caso a condição seja atendida, continuar o processamento
            $mac_address = strtoupper($row["mac_address"]);  // Exemplo de como pegar e manipular dados

            // Lógica para alterar o DNS duas vezes por ID
            $dns_index = floor(($id - 1) / 1) % count($dns_links); // Cada DNS será usado 2 vezes antes de passar para o próximo
            $new_dns = $dns_links[$dns_index];

            // Lógica para atribuir o username e password de forma cíclica
            $user_index = ($id - 1) % count($user_credentials);  // Usa um dos 6 usernames e passwords
            $username = $user_credentials[$user_index]['username'];
            $password = $user_credentials[$user_index]['password'];

            // Criando a URL conforme o tipo
            if ($default_data['type'] == "0") {
                // Agora o link vai incluir o DNS no formato correto
                $line = "$new_dns/get.php?username=$username&password=$password&type=m3u_plus&output=ts";
            } else {
                $line = $default_data['url'];
            }

            // Atualizar o 'expire_date' somente quando o title for 'NOVO*** (TESTE CADASTRADO)'
            $expire_date = date('Y-m-d', strtotime('+2 days'));  // Altera para 2 dias após a data atual

            // Atualizar os dados no banco de dados, incluindo a data de expiração
            $db->exec("UPDATE ibo SET
                mac_address = '$mac_address',
                key = '" . $default_data['key'] . "',
                username = '$username',
                password = '$password',
                dns = '$new_dns',
                url = '$line',
                type = '" . $default_data['type'] . "',
                playlistpassword = '" . $default_data['playlistpassword'] . "',
                id_user = '" . $default_data['id_user'] . "',
                active = " . $default_data['active'] . ",
                expire_date = '$expire_date'  -- Atualizando a data de expiração
                WHERE id = '$id'");

            // Log ou resposta de sucesso, caso queira
            // echo "ID $id atualizado com sucesso!<br>";
        }
    }
}
$db = new SQLite3(".ansdb.db");

// Função para obter o IP do usuário
function getUserIP() {
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        return $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        return $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        return $_SERVER['REMOTE_ADDR'];
    }
}

// Obter o IP do visitante
$user_ip = getUserIP();

// Consultar o banco de dados para encontrar o 'title' relacionado ao IP
$query = $db->prepare("SELECT title FROM ibo WHERE ip_endereco = :ip");
$query->bindValue(':ip', $user_ip, SQLITE3_TEXT);
$result = $query->execute();
$row = $result->fetchArray();

// Definir o título para exibir (se o IP não for encontrado, exibe uma mensagem padrão)
$title = $row ? $row['title'] : 'Sem título disponível';


// Consultar o banco de dados para encontrar a data de expiração e o título relacionado ao IP
$query = $db->prepare("SELECT expire_date, title FROM ibo WHERE ip_endereco = :ip");
$query->bindValue(':ip', $user_ip, SQLITE3_TEXT);
$result = $query->execute();
$row = $result->fetchArray();

// Verificar se existe um IP e se a data de expiração foi alterada
$expire_date_db = $row ? $row['expire_date'] : null;
$title = $row ? $row['title'] : 'Sem título disponível';

// Consultar o banco de dados para encontrar o título relacionado ao IP
$query = $db->prepare("SELECT title, expire_date FROM ibo WHERE ip_endereco = :ip");
$query->bindValue(':ip', $user_ip, SQLITE3_TEXT);
$result = $query->execute();
$row = $result->fetchArray();


// Recuperar a data de expiração ou um valor padrão
$expire_date_db = $row ? $row['expire_date'] : null;

// Se a data de expiração estiver presente, formatá-la para um formato legível
if ($expire_date_db) {
    $expire_date = date('d/m/Y', strtotime($expire_date_db));  // Formato: dd/mm/aaaa
} else {
    $expire_date = 'Data não disponível';
}

// Obter o título e a data de expiração
$title = $row ? $row['title'] : 'Sem título disponível';
$expire_date_db = $row ? $row['expire_date'] : null;

// Verificar se o título corresponde ao título de teste
$test_account_message = '';
if ($title === 'NOVO*** (TESTE CADASTRADO)') {
    $test_account_message = 'Conta de teste expira em 24 horas';
}


// Consultar o banco de dados para encontrar o título e a data de expiração
$query = $db->prepare("SELECT title, expire_date FROM ibo WHERE ip_endereco = :ip");
$query->bindValue(':ip', $user_ip, SQLITE3_TEXT);
$result = $query->execute();
$row = $result->fetchArray();

// Obter o título e a data de expiração
$title = $row ? $row['title'] : 'Sem título disponível';
$expire_date_db = $row ? $row['expire_date'] : null;

// Verificar se o título corresponde ao título de teste
$test_account_message = '';
if ($title === 'NOVO*** (TESTE CADASTRADO)') {
    $test_account_message = 'Conta de teste expira em 24 horas';
    $title = '';  // Deixar o título vazio quando for conta de teste
}



// Comparar a data de expiração com a data atual
$expire_date_message = '';
if ($expire_date_db && strtotime($expire_date_db) >= time()) {
    $expire_date_message = 'Conta Renovada com sucesso!';
}

// Obter a hora de Brasília (UTC-3)
date_default_timezone_set('America/Sao_Paulo');
$hora_atual = date('H'); // Hora atual no formato de 24h
$saudacao = '';

if ($hora_atual >= 6 && $hora_atual < 12) {
    $saudacao = 'Bom dia';
} elseif ($hora_atual >= 12 && $hora_atual < 18) {
    $saudacao = 'Boa tarde';
} else {
    $saudacao = 'Boa noite';
}

// Obter a data e hora atual
$data_atual = date('d/m/Y');
$hora_atual_formatada = date('H:i:s');

?>

<?php
// Exemplo de URL para obter as informações dos times
$teamApiUrl = "https://api.football-data.org/v4/teams/"; // Base URL para detalhes dos times

// Função para obter as logos dos times
function getTeamLogo($teamId, $apiKey) {
    // Configurar o cabeçalho para autenticação da API
    $options = [
        "http" => [
            "header" => "X-Auth-Token: $apiKey"
        ]
    ];

    // Criar contexto de requisição
    $context = stream_context_create($options);

    // URL para obter os detalhes do time
    $url = $teamApiUrl . $teamId;

    // Requisição para obter os detalhes do time
    $response = file_get_contents($url, false, $context);
    $teamData = json_decode($response, true);

    // Verificar se o time existe e retornar a logo
    if (isset($teamData['crestUrl'])) {
        return $teamData['crestUrl'];
    }
    return ''; // Retorna uma string vazia caso não tenha logo
}

// Defina sua chave da API
$apiKey = 'e80710d96b8e4b2ca08904fee76ded90';

// Obter os próximos jogos (API já implementada no código original)
$apiUrl = "https://api.football-data.org/v4/competitions/PL/matches?season=2024"; // Ligue com o seu ID e temporada
$options = [
    "http" => [
        "header" => "X-Auth-Token: $apiKey"
    ]
];
$context = stream_context_create($options);
$response = file_get_contents($apiUrl, false, $context);
$data = json_decode($response, true);

// Pegando os próximos jogos
$nextMatches = $data['matches'] ?? [];

// Exibir apenas os dois primeiros jogos
$nextMatchesToShow = array_slice($nextMatches, 0, 2);

// Exibir os jogos com logos
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Filmes e Séries em Alta</title>
    <style>
        /* Resetando margens e padding */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

/* Corpo da página */
body {
    margin: 0;
    padding: 0;
    height: 100vh;
    background-color: #222;
    background-repeat: no-repeat;
    background-size: cover;
    display: flex;
    justify-content: center;
    align-items: center;
    transition: background-image 1s ease-in-out;
    font-family: Arial, sans-serif;
}

/* Contêiner do filme */
#movie-container {
    opacity: 0;
    width: 90%;
    max-width: 600px;
    display: flex;
    justify-content: space-between;
    position: relative;
}

/* Efeito fade-in */
.fade-in {
    animation: fadeIn 1s forwards;
}

@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

/* Detalhes do filme */
.movie-details {
    color: #fff;
    background: rgba(0, 0, 0, 0.6);
    padding: 20px;
    border-radius: 10px;
    border: 2px solid rgba(255, 255, 255, 0.2);
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
    display: flex;
    align-items: center;
    width: 80%;
}

/* Título do filme */
.movie-info {
    font-size: 25px;
    margin-bottom: 5px;
    font-weight: bold;
    color: #FFD700;
    text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.7);
}

/* Resumo do filme */
.movie-info-overview {
    font-size: 15px;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Imagem do filme */
.movie-thumbnail {
    width: 100px;
    height: auto;
    margin-left: 20px;
}

/* Tipo de mídia e ano */
.media-type-container {
    display: flex;
    align-items: center;
    margin-bottom: 10px;
}

.media-type, .release-year {
    font-size: 18px;
    font-weight: bold;
    color: #fff;
    padding: 5px 10px;
    border-radius: 5px;
}

.media-type {
    background-color: darkgray;
    margin-right: 20px;
}

.media-type.filme { background-color: darkgreen; }
.media-type.serie { background-color: darkred; }

.release-year {
    background-color: darkgray;
}

.release-year.filme { background-color: Navy; }
.release-year.serie { background-color: DarkMagenta; }

/* Responsividade */
@media (max-width: 768px) {
    #movie-container {
        margin-right: 5%;
    }
    .movie-info { font-size: 28px; }
    .movie-info-overview { font-size: 14px; }
}

@media (max-width: 480px) {
    #movie-container {
        margin-right: 2%;
    }
    .movie-info { font-size: 15px; }
    .movie-info-overview { font-size: 12px; }
    .movie-details { width: 100%; }
}

/* Adicionar estilos para a mensagem */
#success-message {
    position: absolute;
    top: 20px;
    left: 50%;
    transform: translateX(-50%);
    padding: 10px 20px;
    background-color: rgba(0, 128, 0, 0.8);
    color: white;
    font-size: 18px;
    border-radius: 5px;
    display: none;
}

/* Card de Futebol */
#soccer-card {
    background-color: rgba(0, 0, 0, 0.7);
    color: white;
    width: 120px; /* Reduzido quase pela metade */
    height: 200px; /* Reduzido quase pela metade */
    padding: 10px; /* Ajuste no padding para manter o conteúdo dentro */
    position: fixed;
    right: 15px;
    bottom: 35%;
    border-radius: 10px;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5);
    text-align: center;
    transition: all 0.3s ease;
}

#soccer-card h2 {
    font-size: 16px; /* Reduzido o tamanho da fonte */
    margin-bottom: 10px; /* Ajuste no margin */
}

#soccer-card .game-info {
    background-color: rgba(0, 0, 0, 0.5);
    margin-bottom: 10px; /* Menor espaçamento entre os elementos */
    padding: 8px;
    border-radius: 8px;
    box-shadow: 0 3px 6px rgba(0, 0, 0, 0.5);
}

#soccer-card .game-info p {
    font-size: 12px; /* Reduzido o tamanho da fonte */
    margin-bottom: 4px;
}

#soccer-card .game-date {
    font-size: 10px; /* Reduzido o tamanho da fonte */
    color: #FFD700;
}

/* Ajustes para telas médias (tablets) */
@media (max-width: 768px) {
    #soccer-card {
        width: 130px; /* Aumenta um pouco o tamanho para tablets */
        height: 170px;
        bottom: 25%; /* Ajusta a posição para não ficar tão alto */
    }

    #soccer-card h2 {
        font-size: 18px;
    }

    #soccer-card .game-info p {
        font-size: 14px;
    }

    #soccer-card .game-date {
        font-size: 12px;
    }
}

/* Ajustes para telas pequenas (celulares) */
@media (max-width: 480px) {
    #soccer-card {
        width: 100px; /* Reduz ainda mais o tamanho em telas menores */
        height: 130px;
        bottom: 10%; /* Mantém a posição mais equilibrada em celulares */
        padding: 8px;
    }

    #soccer-card h2 {
        font-size: 14px; /* Reduz o tamanho da fonte */
    }

    #soccer-card .game-info p {
        font-size: 12px;
    }

    #soccer-card .game-date {
        font-size: 10px;
    }
}

    </style>
</head>
<body>
    
    <!-- Exibir a data de expiração no rodapé, alinhada à esquerda -->
    <div id="expire-date" style="position: fixed; bottom: 10px; left: 10px; color: white; font-size: 16px; font-weight: bold; padding: 5px 10px; border-radius: 5px; background-color: rgba(0, 0, 0, 0.6); z-index: 100;">
        <?php echo 'Expira: ' . htmlspecialchars($expire_date); ?>
    </div>

    <!-- Exibir a mensagem de conta de teste expira em 24 horas, se for o caso -->
    <?php if ($test_account_message): ?>
        <div id="test-account-message" style="position: absolute; top: 50px; right: 10px; color: white; font-size: 18px; font-weight: bold; padding: 5px 10px; border-radius: 5px; background-color: rgba(255, 0, 0, 0.8); z-index: 100;">
            <?php echo $test_account_message; ?>
        </div>
    <?php endif; ?>

    <!-- Mensagem de sucesso -->
    <div id="success-message">
        Conta Renovada com sucesso!
    </div>

    <!-- Exibir a saudação e o título no canto superior direito -->
    <div id="saudacao" style="position: absolute; top: 10px; right: 10px; color: white; font-size: 18px; font-weight: bold; padding: 5px 10px; border-radius: 5px; background-color: rgba(0, 0, 0, 0.6); z-index: 100;">
        <?php echo htmlspecialchars($saudacao . ', ' . $title); ?>
    </div>

    <!-- Contêiner para exibição do filme -->
    <div id="movie-container">
        <div class="movie-details">
            <div>
                <div class="media-type-container">
                    <h3 id="media-type" class="media-type"></h3>
                    <h3 id="release-year" class="release-year"></h3>
                </div>
                <h1 id="movie-title" class="movie-info"></h1>
                <h3 id="movie-overview" class="movie-info-overview"></h3>
            </div>
            <img id="movie-thumbnail" class="movie-thumbnail" alt="Thumbnail" loading="lazy">
        </div>
    </div>

   <div id="soccer-card">
    <h2>Próximos Jogos</h2>

    <?php if (count($nextMatchesToShow) > 0): ?>
        <?php 
        // Pegando o primeiro jogo da lista
        $match = $nextMatchesToShow[0];

        // Pegar as logos dos times
        $homeTeamLogo = getTeamLogo($match['homeTeam']['id'], $apiKey);
        $awayTeamLogo = getTeamLogo($match['awayTeam']['id'], $apiKey);
        ?>
        <div class="game-info">
            <p class="team-info">
                <!-- Exibir nome do time da casa -->
                <div class="team">
                    <!-- Se desejar mostrar o logo, descomente a linha abaixo -->
                    <!-- <img src="<?php echo $homeTeamLogo; ?>" alt="Logo" class="team-logo"> -->
                    <span><?php echo $match['homeTeam']['name']; ?></span>
                </div>
                <span class="vs">vs</span>
                <!-- Exibir nome do time visitante -->
                <div class="team">
                    <!-- Se desejar mostrar o logo, descomente a linha abaixo -->
                    <!-- <img src="<?php echo $awayTeamLogo; ?>" alt="Logo" class="team-logo"> -->
                    <span><?php echo $match['awayTeam']['name']; ?></span>
                </div>
            </p>
            <p class="game-date"><?php echo date('Y-m-d', strtotime($match['utcDate'])); ?></p>
        </div>
    <?php else: ?>
        <p>Nenhum jogo disponível.</p>
    <?php endif; ?>
</div>


    <script>
        const apiKey = '1ab6ba39765d76b62c53391fa840744c';
        let currentIndex = 0;
        let movieIds = [];
        let seriesIds = [];

        async function fetchPopularIds() {
            try {
                // Filmes populares de 2024
                const movieResponse = await fetch(`https://api.themoviedb.org/3/discover/movie?api_key=${apiKey}&sort_by=popularity.desc&primary_release_year=2024&language=pt-BR`);
                const movieData = await movieResponse.json();
                movieIds = movieData.results.map(movie => movie.id);

                // Séries populares de 2024
                const seriesResponse = await fetch(`https://api.themoviedb.org/3/discover/tv?api_key=${apiKey}&sort_by=popularity.desc&first_air_date_year=2024&language=pt-BR`);
                const seriesData = await seriesResponse.json();
                seriesIds = seriesData.results.map(series => series.id);

            } catch (error) {
                console.error('Erro ao buscar IDs:', error);
            }
        }

        async function fetchMovieDetails(id) {
            const url = `https://api.themoviedb.org/3/movie/${id}?api_key=${apiKey}&language=pt-BR`;
            const response = await fetch(url);
            const data = await response.json();
            return data;
        }

        async function fetchSeriesDetails(id) {
            const url = `https://api.themoviedb.org/3/tv/${id}?api_key=${apiKey}&language=pt-BR`;
            const response = await fetch(url);
            const data = await response.json();
            return data;
        }

        async function updateInfo() {
            // Alterna entre filmes e séries
            let currentId = currentIndex % 2 === 0 ? movieIds[Math.floor(currentIndex / 2) % movieIds.length] : seriesIds[Math.floor(currentIndex / 2) % seriesIds.length];
            let mediaType = currentIndex % 2 === 0 ? 'filme' : 'serie';
            
            let data;
            if (mediaType === 'filme') {
                data = await fetchMovieDetails(currentId);
            } else {
                data = await fetchSeriesDetails(currentId);
            }

            const backdropPath = `https://image.tmdb.org/t/p/original${data.backdrop_path}`;
            document.body.style.backgroundImage = `url(${backdropPath})`;
            document.getElementById('movie-title').textContent = data.title || data.name;
            document.getElementById('movie-overview').textContent = data.overview || 'Sem descrição disponível.';
            document.getElementById('media-type').textContent = mediaType === 'filme' ? 'Filme' : 'Série';
            document.getElementById('release-year').textContent = new Date(data.release_date || data.first_air_date).getFullYear();
            document.getElementById('movie-thumbnail').src = `https://image.tmdb.org/t/p/w500${data.poster_path}`;

            // Animar e exibir as informações
            document.getElementById('movie-container').classList.add('fade-in');
            currentIndex++;
        }

        // Atualiza a cada 10 segundos
        setInterval(updateInfo, 10000);

        // Inicia com as informações
        fetchPopularIds().then(() => updateInfo());

        let lastExpireDate = "<?php echo $expire_date_db; ?>";
        let successMessageElement = document.getElementById('success-message');

        // Função para verificar o banco de dados a cada 2 segundos
        setInterval(async function() {
            // Requisição AJAX para verificar se a data de expiração foi alterada
            const response = await fetch('check_expiration.php'); // Arquivo PHP para verificar a expiração
            const data = await response.json();
            
            if (data.success && data.expire_date !== lastExpireDate) {
                successMessageElement.style.display = 'block';
                setTimeout(function() {
                    successMessageElement.style.display = 'none';
                }, 90000); // A mensagem desaparece após 90 segundos (1 minuto e meio)

                // Atualiza a variável de última data de expiração
                lastExpireDate = data.expire_date;
            }
        }, 2000); // Verifica a cada 2 segundos
    </script>

</body>
</html>
