import feedparser
import requests
import json
import os
import re

TELEGRAM_TOKEN = "8816727123:AAFvd_1oh1ZAQq69kz1mvD1QCWbZyMkaRKw"
CHAT_ID = "1640434336"
OPENROUTER_API_KEY = "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"

STATE_FILE = "/home/ubuntu/GhostAgency/upwork_state.json"
DRAFTS_DIR = "/home/ubuntu/GhostAgency/drafts"

# RSS di ricerca Upwork (Esempio generico per Python/Scraping)
# Nota: Upwork cambia spesso l'URL dei feed, questo è un feed di ricerca standard RSS
UPWORK_RSS = "https://www.upwork.com/ab/feed/jobs/rss?q=python+scraping"

os.makedirs(DRAFTS_DIR, exist_ok=True)

def send_telegram(text):
    url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
    requests.post(url, json={"chat_id": CHAT_ID, "text": text, "parse_mode": "Markdown"})

def ask_nemotron(job_description):
    headers = {
        "Authorization": f"Bearer {OPENROUTER_API_KEY}",
        "Content-Type": "application/json"
    }
    payload = {
        "model": "nvidia/nemotron-3-ultra-550b-a55b",
        "messages": [
            {
                "role": "system",
                "content": "Sei un programmatore Python esperto. Un cliente ha pubblicato questo annuncio di lavoro. Scrivi lo script Python che risolve il suo problema. Rispondi SOLO con il codice puro, senza spiegazioni, pronto per essere copiato e venduto."
            },
            {
                "role": "user",
                "content": job_description
            }
        ]
    }
    try:
        response = requests.post("https://integrate.api.nvidia.com/v1/chat/completions", headers=headers, json=payload, timeout=30)
        return response.json()['choices'][0]['message']['content']
    except Exception as e:
        return f"# Errore nella generazione del codice: {e}"

def sniper():
    if os.path.exists(STATE_FILE):
        with open(STATE_FILE, "r") as f:
            seen_jobs = json.load(f)
    else:
        seen_jobs = []

    feed = feedparser.parse(UPWORK_RSS)
    
    for entry in feed.entries[:5]: # Controlla i primi 5 lavori più recenti
        job_id = entry.id
        
        if job_id in seen_jobs:
            continue
            
        title = entry.title
        link = entry.link
        description = entry.description
        
        # Pulisci l'HTML di base
        clean_desc = re.sub('<[^<]+>', '', description)[:1000] 
        
        print(f"[*] Trovato nuovo lavoro: {title}")
        
        # Fai scrivere il codice a Nemotron
        print("[*] Generazione codice in corso tramite Nemotron...")
        generated_code = ask_nemotron(clean_desc)
        
        file_path = os.path.join(DRAFTS_DIR, f"{job_id[-10:]}.py")
        with open(file_path, "w") as f:
            f.write(generated_code)
            
        msg = f"💸 *NUOVO LAVORO UPWORK TROVATO*\n\n"
        msg += f"*{title}*\n\n"
        msg += f"Ho già scritto la soluzione in Python usando Nemotron. Il file è pronto sul server qui:\n`{file_path}`\n\n"
        msg += f"Accetta il lavoro qui e consegnagli il codice: {link}"
        
        send_telegram(msg)
        seen_jobs.append(job_id)

    # Mantieni gli ultimi 100 job
    if len(seen_jobs) > 100:
        seen_jobs = seen_jobs[-100:]

    with open(STATE_FILE, "w") as f:
        json.dump(seen_jobs, f)

if __name__ == "__main__":
    sniper()
