import re, json

links = {}
working = []

# Читаем лог
with open('test.log', 'r', encoding='utf-8', errors='ignore') as f:
    lines = f.readlines()

# Сначала вытаскиваем все ссылки и их ID
for line in lines:
    m = re.search(r'(\{.*\})', line)
    if m:
        try:
            d = json.loads(m.group(1))
            if d.get('info') == 'gotservers':
                for srv in d.get('servers', []):
                    links[str(srv['id'])] = srv['link']
        except:
            pass

# Теперь ищем результаты пинга (строки вида: "... 109 🇭🇰 Hong Kong | [BL] elapse: 150ms")
for line in lines:
    m = re.search(r'\d{4}/\d{2}/\d{2}\s+\d{2}:\d{2}:\d{2}\s+(\d+)\s+.*elapse:\s+(\d+)ms', line)
    if m:
        server_id = m.group(1)
        elapse_ms = int(m.group(2))
        
        # Если пинг > 0, значит данные успешно прошли через туннель и DPI
        if elapse_ms > 0:
            if server_id in links:
                working.append(links[server_id])

unique_working = list(set(working))

# Сохраняем финальный список
with open('final_working_configs.txt', 'w', encoding='utf-8') as f:
    for link in unique_working:
        f.write(link + '\n')
        
print(f"{len(unique_working)}")
