import json
import os
import sys
import subprocess
import asyncio

URLS = [
    {"url": "https://www.instagram.com/reel/DZh4NI1uCpk/", "id": "DZh4NI1uCpk", "type": "instagram_reel"},
    {"url": "https://www.instagram.com/reel/DRXZJeHiAES/", "id": "DRXZJeHiAES", "type": "instagram_reel"},
    {"url": "https://www.instagram.com/p/Dao2qjRxY_z/", "id": "Dao2qjRxY_z", "type": "instagram_post"},
    {"url": "https://www.instagram.com/p/DbwoSGxluFM/", "id": "DbwoSGxluFM", "type": "instagram_carousel"},
    {"url": "https://www.instagram.com/p/Dbs4wjuDC5Q/", "id": "Dbs4wjuDC5Q", "type": "instagram_carousel"}
]

os.makedirs("/opt/scrapling-runner/outputs/batch_notes", exist_ok=True)

async def scrape_target(item):
    url = item["url"]
    item_id = item["id"]
    out_file = f"/opt/scrapling-runner/outputs/batch_notes/{item_id}.json"
    print(f"[*] Processing {item_id}: {url}")
    
    # 1. Tentar via Jina Reader primeiro para captura rapida de texto/legenda
    jina_cmd = ["curl", "-s", f"https://r.jina.ai/{url}"]
    proc = subprocess.run(jina_cmd, capture_output=True, text=True, timeout=30)
    jina_text = proc.stdout if proc.returncode == 0 else ""
    
    # 2. Tentar download de video/midia via yt-dlp se for reel
    media_file = f"/opt/scrapling-runner/outputs/batch_notes/{item_id}.mp4"
    dl_cmd = ["yt-dlp", "-o", media_file, "--no-warnings", url]
    dl_proc = subprocess.run(dl_cmd, capture_output=True, text=True, timeout=60)
    has_media = os.path.exists(media_file)
    
    res = {
        "id": item_id,
        "url": url,
        "type": item["type"],
        "jina_text": jina_text,
        "has_media": has_media,
        "media_file": media_file if has_media else None,
        "yt_dlp_out": dl_proc.stdout[:500] if dl_proc.stdout else dl_proc.stderr[:500]
    }
    
    with open(out_file, "w", encoding="utf-8") as f:
        json.dump(res, f, ensure_ascii=False, indent=2)
    print(f"[+] Saved {out_file} (Media: {has_media})")

async def main():
    for item in URLS:
        try:
            await scrape_target(item)
        except Exception as e:
            print(f"[-] Error {item['id']}: {e}")

if __name__ == '__main__':
    asyncio.run(main())
