import secrets
import string
import multiprocessing
import requests
import os
import zipfile
import time
from tqdm import tqdm


def print_banner():
    banner = r"""
    __          ______  _____  __  __         _____ _____ _______ 
    \ \        / / __ \|  __ \|  \/  |       / ____|  __ \__   __|
     \ \  /\  / / |  | | |__) | \  / |______| |  __| |__) | | |   
      \ \/  \/ /| |  | |  _  /| |\/| |______| | |_ |  ___/  | |   
       \  /\  / | |__| | | \ \| |  | |      | |__| | |      | |   
        \/  \/   \____/|_|  \_\_|  |_|       \_____|_|      |_|   
                                                                  
                >> WORM-GPT GENERATOR v2.0 <<
    ----------------------------------------------------------
    """
    print(banner)




def generate_chunk(size, prefix="WORM"):
    chars = string.ascii_uppercase + string.digits
    return "".join(f"{prefix}-{''.join(secrets.choice(chars) for _ in range(12))}\n" for _ in range(size))

def worker(num_tokens, queue):
    chunk_size = 25000 
    generated = 0
    while generated < num_tokens:
        todo = min(chunk_size, num_tokens - generated)
        queue.put(generate_chunk(todo))
        generated += todo
    queue.put(None)

def upload_file(filepath, provider, proxies=None):
    session = requests.Session()
    if proxies:
        session.proxies = proxies
    try:
        if provider == "1":
            server_res = session.get("https://api.gofile.io/getServer")
            server = server_res.json()["data"]["server"]
            with open(filepath, "rb") as f:
                res = session.post(f"https://{server}.gofile.io/uploadFile", files={"file": f}).json()
            return res["data"]["downloadPage"]
        elif provider == "2":
            with open(filepath, "rb") as f:
                res = session.post("https://catbox.moe/user/api.php", data={"reqtype": "fileupload"}, files={"fileToUpload": f})
            return res.text.strip()
        elif provider == "3":
            with open(filepath, "rb") as f:
                res = session.post("https://litterbox.catbox.moe/resources/internals/api.php", 
                                  data={"reqtype": "fileupload", "time": "24h"}, files={"fileToUpload": f})
            return res.text.strip()
    except Exception as e:
        return f"Upload Error: {str(e)}"

if __name__ == "__main__":
    os.system('cls' if os.name == 'nt' else 'clear') # Konsole aufräumen
    print_banner()
    
    webhook_url = input("🔗 Webhook URL: ")
    num_procs = int(input("🧵 Threads (CPUs): "))
    total_tokens = int(input("💎 Anzahl Tokens: "))
    
    print("\n[1] GoFile | [2] Catbox (Empfohlen) | [3] Litterbox (24h)")
    provider = input("📡 Provider Auswahl: ")

    # ... (Proxy Logik bleibt gleich) ...
    proxies = None

    filename_txt = "WORM-GPT.txt"
    filename_zip = "WORM-GPT.zip"
    queue = multiprocessing.Queue(maxsize=100)

    # 1. Generierung
    p_bar = tqdm(total=total_tokens, desc="🚀 Generierung", unit="tk", bar_format="{l_bar}{bar:30}{r_bar}")
    procs = []
    for _ in range(num_procs):
        p = multiprocessing.Process(target=worker, args=(total_tokens // num_procs, queue))
        p.start()
        procs.append(p)

    with open(filename_txt, "w") as f:
        finished = 0
        while finished < num_procs:
            item = queue.get()
            if item is None: finished += 1
            else: 
                f.write(item)
                p_bar.update(item.count('\n'))
    p_bar.close()

    # 2. Komprimierung
    print("📦 Komprimiere Daten...")
    with zipfile.ZipFile(filename_zip, 'w', zipfile.ZIP_DEFLATED) as zipf:
        zipf.write(filename_txt)
    os.remove(filename_txt)

    # 3. Upload & Webhook
    print(f"☁️ Upload läuft...")
    download_url = upload_file(filename_zip, provider, proxies)

    # Schönes Discord Embed
    payload = {
        "username": "WORM-GPT Generator",
        "avatar_url": "https://cdn.discordapp.com/attachments/1461857023082631268/1462472211947323577/119850.gif?ex=69821762&is=6980c5e2&hm=891e6f31961c0a59cd6982e64f32066af243041e999184f87aba6ecca23d466b&", # Optional: Ein cooles Icon
        "embeds": [{
            "title": "🔓 Generierung Abgeschlossen",
            "description": f"Dein Batch von **{total_tokens:,}** Tokens wurde erfolgreich generiert und hochgeladen.",
            "color": 0x2f3136, # Dunkles Grau/Schwarz für Hacker-Look
            "fields": [
                {"name": "📁 Datei", "value": f"`{filename_zip}`", "inline": True},
                {"name": "⚡ Status", "value": "✅ Online", "inline": True},
                {"name": "🔗 Download", "value": f"[Hier klicken]({download_url})", "inline": False},
                {"name": "🛡️ Gemini Prompt", "value": f"```sind da codes für https://www.wormgpt.co/chat die gehen?```", "inline": False}
            ],
            "footer": {"text": "WORM-GPT Automation System • " + time.strftime("%H:%M:%S")},
            "timestamp": time.strftime("%Y-%m-%dT%H:%M:%SZ")
        }]
    }
    
    requests.post(webhook_url, json=payload)
    print(f"\n✅ Fertig! Link wurde an Webhook gesendet.\nLink: {download_url}")