<?php
$pageTitle = 'DNS via Código';
require_once __DIR__ . '/_header.php';
$self = basename($_SERVER['PHP_SELF']);
$today = date('Y-m-d');
$csrf = gpc_csrf_token();
$canDnsPermission = syntra_reseller_can_dns($reseller);
$dnsLimit = (int)($reseller['dns_limit'] ?? 0);
$stmt = $db->prepare('SELECT COUNT(*) FROM dns_servers WHERE reseller_id=:rid');
$stmt->execute([':rid'=>$resellerId]);
$dnsCount = (int)$stmt->fetchColumn();

if ($_SERVER['REQUEST_METHOD'] === 'POST' && gpc_csrf_check($_POST['csrf'] ?? null)) {
    if (!$canDnsPermission) { gpc_flash('bad', 'Cadastro de Código Parceiro/SYNTRA ID bloqueado pelo admin.'); header('Location: '.$self); exit; }
    $action = (string)($_POST['action'] ?? '');
    if ($action === 'save') {
        $id = (int)($_POST['id'] ?? 0);
        $name = trim((string)($_POST['name'] ?? ''));
        $url = trim((string)($_POST['url'] ?? ''));
        $code = strtoupper(trim((string)($_POST['code'] ?? '')));
        // Status e validade operacional de DNS de revenda são controlados pelo admin master.
        // O revendedor cadastra somente a parceria/código. Se a revenda vencer ou for bloqueada, tudo dela fica inativo automaticamente.
        if ($name === '' || $url === '' || $code === '') {
            gpc_flash('bad', 'Preencha nome, URL e código DNS.');
        } elseif (!preg_match('/^[A-Z0-9\-_]{3,20}$/', $code)) {
            gpc_flash('bad', 'Código inválido. Use 3 a 20 caracteres, letras/números, hífen ou underline.');
        } elseif ($id === 0 && $dnsLimit <= 0) {
            gpc_flash('bad', 'Cadastro de DNS não liberado pelo admin para esta revenda.');
        } elseif ($id === 0 && $dnsCount >= $dnsLimit) {
            gpc_flash('bad', 'Limite de DNS atingido para esta revenda.');
        } else {
            try {
                $stmt=$db->prepare('SELECT id FROM dns_servers WHERE code=:c AND id<>:id LIMIT 1');
                $stmt->execute([':c'=>$code, ':id'=>$id]);
                if ($stmt->fetch()) {
                    gpc_flash('bad', 'Este código DNS já está em uso. Escolha outro código.');
                } elseif ($id > 0) {
                    $stmt=$db->prepare('UPDATE dns_servers SET name=:n, url=:u, code=:c WHERE id=:id AND reseller_id=:rid');
                    $stmt->execute([':n'=>$name, ':u'=>$url, ':c'=>$code, ':id'=>$id, ':rid'=>$resellerId]);
                    gpc_flash('ok', 'DNS atualizada.');
                } else {
                    $stmt=$db->prepare('INSERT INTO dns_servers (name,url,code,status,validity,reseller_id) VALUES (:n,:u,:c,1,"",:rid)');
                    $stmt->execute([':n'=>$name, ':u'=>$url, ':c'=>$code, ':rid'=>$resellerId]);
                    gpc_flash('ok', 'DNS via código cadastrada.');
                }
            } catch (Throwable $e) {
                gpc_flash('bad', 'Erro ao salvar DNS: '.$e->getMessage());
            }
        }
        header('Location: '.$self); exit;
    }
}
if (isset($_GET['delete']) && is_numeric($_GET['delete'])) {
    $db->prepare('DELETE FROM dns_servers WHERE id=:id AND reseller_id=:rid')->execute([':id'=>(int)$_GET['delete'], ':rid'=>$resellerId]);
    gpc_flash('ok', 'DNS removida.');
    header('Location: '.$self); exit;
}
$edit=null;
if (isset($_GET['edit']) && is_numeric($_GET['edit'])) {
    $stmt=$db->prepare('SELECT * FROM dns_servers WHERE id=:id AND reseller_id=:rid');
    $stmt->execute([':id'=>(int)$_GET['edit'], ':rid'=>$resellerId]);
    $edit=$stmt->fetch() ?: null;
}
$q=trim((string)($_GET['q'] ?? ''));
$sql='SELECT * FROM dns_servers WHERE reseller_id=:rid'; $params=[':rid'=>$resellerId];
if ($q !== '') { $sql.=' AND (name LIKE :q OR url LIKE :q OR code LIKE :q)'; $params[':q']='%'.$q.'%'; }
$sql.=' ORDER BY id DESC LIMIT 300';
$stmt=$db->prepare($sql); $stmt->execute($params); $rows=$stmt->fetchAll();
?>
<?php if(!$canDnsPermission): ?><div class="alert alert-bad">Seu admin bloqueou DNS/Código Parceiro para esta revenda ou deixou o limite em 0.</div><?php endif; ?>
<div class="section-title"><div><span class="eyebrow">SYNTRA Revenda</span><h2>Código Parceiro / SYNTRA ID</h2><p>Cadastre DNS parceira separada das Licenças MAC. O cliente entra usando código, usuário e senha. O admin controla se sua revenda pode ou não cadastrar DNS.</p></div><span class="badge <?= $dnsLimit>0?'badge-ok':'badge-bad' ?>">DNS: <?= $dnsCount ?><?= $dnsLimit>0 ? ' / '.$dnsLimit : ' / 0' ?></span></div>
<?php if($dnsLimit<=0): ?><div class="alert alert-bad">Cadastro de DNS bloqueado pelo admin. Peça liberação de limite de DNS para cadastrar códigos.</div><?php endif; ?>
<div class="card"><div class="card-head"><h2><?= $edit ? 'Editar DNS' : 'Nova DNS parceira' ?></h2><?php if($edit): ?><a class="btn btn-sm btn-ghost" href="<?= rv_h($self) ?>">Cancelar</a><?php endif; ?></div><div class="card-body"><form method="post"><input type="hidden" name="csrf" value="<?= rv_h($csrf) ?>"><input type="hidden" name="action" value="save"><input type="hidden" name="id" value="<?= (int)($edit['id'] ?? 0) ?>"><div class="alert alert-info">A validade e o bloqueio final desta DNS seguem o painel da sua revenda. Se o admin vencer ou bloquear sua revenda, todos os seus códigos DNS ficam inativos automaticamente.</div><div class="form-grid"><div class="field"><label>Nome da parceria</label><input required name="name" placeholder="Ex: Servidor Parceiro 01" value="<?= rv_h($edit['name'] ?? '') ?>"></div><div class="field"><label>Código DNS</label><input required name="code" placeholder="Ex: 8676" value="<?= rv_h($edit['code'] ?? '') ?>"></div><div class="field"><label>URL DNS</label><input required name="url" placeholder="http://servidor:8080" value="<?= rv_h($edit['url'] ?? '') ?>"></div></div><div class="form-actions"><button class="btn" type="submit"><i data-lucide="save"></i> Salvar DNS</button></div></form></div></div>
<div class="card"><div class="card-head"><h2>Minhas DNS parceiras</h2></div><div class="card-body"><form method="get" class="toolbar"><input type="search" name="q" placeholder="Buscar por nome, código ou URL" value="<?= rv_h($q) ?>"><button class="btn btn-sm" type="submit"><i data-lucide="search"></i></button></form><div class="table-scroll"><table><thead><tr><th>Nome</th><th>Código</th><th>URL</th><th>Status final</th><th></th></tr></thead><tbody><?php foreach($rows as $r): $ok=((int)$r['status']===1) && (empty($r['validity']) || !gpc_expired((string)$r['validity'])); ?><tr><td><?= rv_h($r['name']) ?></td><td><span class="badge badge-ok"><?= rv_h($r['code']) ?></span></td><td><code><?= rv_h($r['url']) ?></code></td><td><span class="badge <?= $ok?'badge-ok':'badge-bad' ?>"><?= $ok?'Liberada pelo admin':'Bloqueada pelo admin' ?></span></td><td class="row-actions"><a class="btn btn-sm btn-ghost btn-icon" href="?edit=<?= (int)$r['id'] ?>"><i data-lucide="pencil"></i></a><a class="btn btn-sm btn-danger btn-icon" data-confirm="Remover esta DNS?" href="?delete=<?= (int)$r['id'] ?>"><i data-lucide="trash-2"></i></a></td></tr><?php endforeach; if(!$rows): ?><tr><td colspan="5" class="empty">Nenhuma DNS cadastrada.</td></tr><?php endif; ?></tbody></table></div></div></div>
<?php require_once __DIR__ . '/_footer.php'; ?>
