<?php
declare(strict_types=1);

require_once __DIR__ . '/../includes/auth.php';
require_once __DIR__ . '/../api/_auth_common.php';

function p2p_h($value): string {
    return htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8');
}

function p2p_normalize_url(string $value): string {
    $url = rtrim(trim($value), '/');
    if ($url === '') return '';
    if (!preg_match('~^https?://[^\s]+$~i', $url)) {
        throw new RuntimeException('A URL do Node deve começar com http:// ou https://.');
    }
    $parts = parse_url($url);
    if (!is_array($parts) || empty($parts['host'])) {
        throw new RuntimeException('Informe uma URL válida para o servidor Node.');
    }
    if (!empty($parts['query']) || !empty($parts['fragment']) || !empty($parts['user']) || !empty($parts['pass'])) {
        throw new RuntimeException('A URL do Node não pode conter usuário, senha, parâmetros ou fragmento.');
    }
    if (!empty($parts['path']) && $parts['path'] !== '/') {
        throw new RuntimeException('Informe somente a origem pública, sem subpastas. Exemplo: https://p2p.seudominio.com');
    }
    return $url;
}

$alert = '';
$alertType = 'success';
$dbPath = __DIR__ . '/../api/db.db';

try {
    $dbP2p = new PDO('sqlite:' . $dbPath, null, null, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ]);
    auth_ensure_schema($dbP2p);

    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save_p2p_config'])) {
        $nodeUrl = p2p_normalize_url((string)($_POST['p2p_node_url'] ?? ''));
        $nodeKey = trim((string)($_POST['p2p_node_key'] ?? ''));

        if (($nodeUrl === '') xor ($nodeKey === '')) {
            throw new RuntimeException('Preencha a URL e o token juntos, ou deixe os dois vazios para desativar.');
        }
        if ($nodeKey !== '' && strlen($nodeKey) < 24) {
            throw new RuntimeException('O token deve possuir pelo menos 24 caracteres. Recomendado: 32 ou mais.');
        }
        if ($nodeKey !== '' && preg_match('/\s/', $nodeKey)) {
            throw new RuntimeException('O token não pode conter espaços.');
        }

        $sql = 'UPDATE app_config SET
                    p2p_node_url = ?,
                    p2p_node_key = ?,
                    p2p_updated_at = datetime("now"),
                    updated_at = datetime("now")
                WHERE id = 1';
        $dbP2p->prepare($sql)->execute([$nodeUrl, $nodeKey]);
        $alert = $nodeUrl === ''
            ? 'P2P desativado no painel. O aplicativo usará IPTV normal.'
            : 'URL e token do Node P2P salvos. Os aplicativos sincronizarão automaticamente.';
    }

    $cfg = $dbP2p->query('SELECT p2p_node_url, p2p_node_key, p2p_updated_at FROM app_config WHERE id=1 LIMIT 1')->fetch() ?: [];
} catch (Throwable $error) {
    $cfg = [
        'p2p_node_url' => '',
        'p2p_node_key' => '',
        'p2p_updated_at' => '',
    ];
    $alert = $error->getMessage() ?: 'Não foi possível carregar a configuração P2P.';
    $alertType = 'danger';
}

$configured = trim((string)($cfg['p2p_node_url'] ?? '')) !== ''
    && strlen(trim((string)($cfg['p2p_node_key'] ?? ''))) >= 24;

require_once __DIR__ . '/../includes/header.php';
?>
<div class="p2p-wrap">
    <div class="p2p-hero">
        <div>
            <h3><i class='bx bx-network-chart'></i> Servidor P2P</h3>
        
        </div>
        <span class="p2p-status <?= $configured ? 'is-online' : 'is-offline' ?>">
            <?= $configured ? 'CONFIGURADO' : 'DESATIVADO' ?>
        </span>
    </div>

    <?php if ($alert !== ''): ?>
        <div class="alert alert-<?= p2p_h($alertType) ?>"><?= p2p_h($alert) ?></div>
    <?php endif; ?>

    <form method="post" autocomplete="off" id="p2pForm">
        <input type="hidden" name="save_p2p_config" value="1">
        <div class="p2p-grid">
            <div class="card p2p-card p2p-full">
                <div class="card-header">Conexão</div>
                <div class="card-body">
                    <div class="mb-4">
                        <label class="form-label" for="p2pNodeUrl">URL do P2P</label>
                        <input
                            class="form-control"
                            id="p2pNodeUrl"
                            name="p2p_node_url"
                            type="url"
                            inputmode="url"
                            value="<?= p2p_h($cfg['p2p_node_url'] ?? '') ?>"
                            placeholder="https://p2p.seudominio.com"
                            spellcheck="false"
                        >
                       
                    </div>

                    <div class="secret-row">
                        <label class="form-label" for="p2pNodeKey">Token P2P</label>
                        <div class="secret-control">
                            <input
                                class="form-control p2p-secret"
                                id="p2pNodeKey"
                                name="p2p_node_key"
                                type="password"
                                value="<?= p2p_h($cfg['p2p_node_key'] ?? '') ?>"
                                placeholder="Mesma APP_KEY configurada no arquivo .env do Node"
                                minlength="24"
                                spellcheck="false"
                            >
                            <button type="button" class="secret-toggle" aria-controls="p2pNodeKey">Mostrar</button>
                        </div>
                      
                    </div>
                </div>
            </div>

            <div class="card p2p-card">
                <div class="card-header">Como funciona</div>
                <div class="card-body p2p-note">
                    O app cria uma URL HLS criptografada e conecta o tracker/sinalizador WebRTC.
                </div>
            </div>

            <div class="card p2p-card">
                <div class="card-header">Checklist</div>
                <div class="card-body p2p-checklist">
                    <div><i class='bx bx-check-circle'></i> Aponta para a URL pública.</div>
                 
                    <div><i class='bx bx-check-circle'></i> Nginx permite HTTP, HLS e WebSocket.</div>
                    <div><i class='bx bx-check-circle'></i> FFmpeg está instalado no servidor.</div>
                </div>
            </div>

            <div class="card p2p-card p2p-full">
                <div class="card-body p2p-actions">
                    <div class="p2p-last"><strong>Última atualização:</strong> <?= p2p_h(($cfg['p2p_updated_at'] ?? '') ?: 'Ainda não salva') ?></div>
                    <div class="p2p-buttons">
                        <button class="btn btn-outline-secondary" type="button" id="clearP2pConfig"><i class='bx bx-power-off'></i> Desativar</button>
                        <button class="btn btn-primary save-p2p" type="submit"><i class='bx bx-save'></i> Salvar P2P</button>
                    </div>
                </div>
            </div>
        </div>
    </form>
</div>
<?php require_once __DIR__ . '/../includes/footer.php'; ?>
