import time
import requests
from requests.exceptions import ProxyError, ConnectionError, ConnectTimeout, ReadTimeout
import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from base.utils import MovieoDatabase

proxy = "http://apiec803a20e08d2684_c_US:driS9IZ2@res.proxy-seller.com:10000"
proxies = {"http": proxy, "https": proxy}

def set_header():
    with MovieoDatabase() as db:
        _30nama_db = db.get_30nama_account('status',1,'api_key,token,download_limit','ORDER BY RAND() LIMIT 1')
    api_key = _30nama_db[0][0]
    token = _30nama_db[0][1]
    headers = {
        "Accept": "application/json, text/plain, */*",
        "Accept-Language": "en-US,en;q=0.9,fa;q=0.8",
        "c-api-key": api_key,
        "c-app-version": "2.0.0",
        "c-platform": "Website",
        "c-token": token,
        "c-useragent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0",
        "Origin": "https://30nama.com",
        "Referer": "https://30nama.com/",
    }
    return headers

def send_request_to_30nama(url, data = {}):
    try:
        r = requests.post(url, headers=set_header(), data=data, proxies=proxies, timeout=20)
    except (ProxyError, ConnectionError, ConnectTimeout, ReadTimeout) as e:
        print(f"Proxy/Connection error ({e}) — retrying request with new IP...")
        time.sleep(5)
        return send_request_to_30nama(url, data)
    if r.status_code == 200:
        return r.json().get("result", {})
    else:
        return send_request_to_30nama(url, data)

def merge_30nama_results(res1, res2):
    posts1 = res1.get("title", {}).get("posts", []) if res1 else []
    posts2 = res2.get("title", {}).get("posts", []) if res2 else []
    seen = set()
    merged = []

    for p in posts1 + posts2:
        pid = p.get("id")
        if pid not in seen:
            seen.add(pid)
            merged.append(p)

    return merged