import requests
from bs4 import BeautifulSoup
import re, json, os, time
from urllib.parse import unquote  # برای decode لینک‌های داخل query

logedin = ''
with open('logedin.txt', 'r', encoding='utf-8') as f:
    for line in f:
        logedin = line.strip()
        break

try:
    os.remove('linkss.txt')
except:
    pass

# --- استفاده از Session و ست کردن کوکی‌ها ---
session = requests.Session()
session.cookies.set('wordpress_logged_in_7a04687845b0293923d85c8b5afee67b', logedin)
session.cookies.set('hide_top_message', '1')

# --- تابع GET امن با retry و delay ---
def safe_get(url, headers=None, retries=3, delay=5, timeout=60):
    """GET با retry و delay برای لینک‌هایی که دیر جواب میدن"""
    for attempt in range(retries):
        try:
            response = session.get(url, headers=headers, timeout=timeout)
            if response.status_code == 200:
                return response
            else:
                print(f"Status {response.status_code} for {url}, retry {attempt+1}")
        except requests.exceptions.RequestException as e:
            print(f"Request error for {url}: {e}, retry {attempt+1}")
        time.sleep(delay)
    return None

def get_links_movie(id, name, imdb):
    headers = {
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
        'accept-language': 'en-US,en;q=0.9,fa;q=0.8',
        'cache-control': 'max-age=0',
        'priority': 'u=0, i',
        'referer': 'https://zhomis.info/all-movie/',
        'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"macOS"',
        'sec-fetch-dest': 'document',
        'sec-fetch-mode': 'navigate',
        'sec-fetch-site': 'same-origin',
        'sec-fetch-user': '?1',
        'upgrade-insecure-requests': '1',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
    }

    response = safe_get(f'https://zhomis.info/play/{id}/', headers=headers)
    if not response:
        print(f"Skip movie {id}")
        return

    html = response.text

    mp4s = re.findall(r'https://[^\s"\'<>]+?\.mp4(?:\?[^\s"\'<>]+)?', html)
    vtts = re.findall(r'https://[^\s"\'<>]+?\.vtt(?:\?[^\s"\'<>]+)?', html)


    # حذف تکراری‌ها و نویزها
    mp4s = list(set([x.strip().replace('",', '').replace('"}', '') for x in mp4s if x.startswith('https://')]))
    vtts = list(set([x.strip().replace('",', '').replace('"}', '') for x in vtts if x.startswith('https://')]))

    if not mp4s and not vtts:
        print(f"No valid links for movie ID {id}")
        return

    with open('linkss.txt', 'a', encoding='utf-8') as add:
        for link in mp4s:
            add.write(f"{id};{name};{imdb};{link}\n")

        # فقط زیرنویس‌های غیر دوبله
        for link in vtts:
            if 'Dubbed' not in link:
                add.write(f"{id};{name};{imdb};{link}\n")

def get_links_serial(id, name, imdb):
    headers = {
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
        'accept-language': 'en-US,en;q=0.9,fa;q=0.8',
        'priority': 'u=0, i',
        'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"macOS"',
        'sec-fetch-dest': 'document',
        'sec-fetch-mode': 'navigate',
        'sec-fetch-site': 'none',
        'sec-fetch-user': '?1',
        'upgrade-insecure-requests': '1',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
    }
    response = safe_get('https://zhomis.info/play/' + str(id) + '/', headers=headers)
    if not response:
        print(f"Skip serial {id}")
        return

    # parse json های player و ذخیره لینک با query کامل
    json_data = re.findall(r'"file"(.*?)}', str(response.text).replace('\/', '/'))
    for x in json_data:
        try:
            json_loaded = json.loads('{"file"' + x + '}')
            file = json_loaded.get('file', '')
            fa_vtt = json_loaded.get('fa_vtt', '')

            season = str(int(json_loaded.get('season', 0)) + 1)
            part = str(int(json_loaded.get('part', 0)) + 1)

            add = open('linkss.txt', 'a', encoding='utf-8')
            add.write(f"{id};{name};{part};{season};{imdb};{fa_vtt};{file}\n")
            add.close()
        except Exception as e:
            print("Error serial:", e)
            pass

# بقیه کدها عوض نشده 👇
links = ['https://zhomis.info/series/page/', 'https://zhomis.info/all-movie/page/']

def get_data(link, page):
    headers = {
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
        'accept-language': 'en-US,en;q=0.9,fa;q=0.8',
        'priority': 'u=0, i',
        'referer': 'https://zhomis.info/all-movie/',
        'sec-ch-ua': '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"macOS"',
        'sec-fetch-dest': 'document',
        'sec-fetch-mode': 'navigate',
        'sec-fetch-site': 'same-origin',
        'sec-fetch-user': '?1',
        'upgrade-insecure-requests': '1',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
    }

    response = safe_get(link + str(page) + '/?sortby=modified', headers=headers)
    if not response:
        print(f"Failed to get data for page {page} of {link}")
        return []

    soup = BeautifulSoup(response.text, 'html.parser')
    l = []

    for link_div in soup.find_all('div', class_='inner_cover'):
        try:
            playOnline = link_div.find('div', class_='btnPlayOnlineitem')
            pathl = playOnline.find('path')
            name = link_div.find('a')['title']
            id = str(link_div.find('img')['alt']).split('-')[0].replace(name, '').strip()
            link_a = link_div.find('a')['href']
            l.append((id, name, link_a))
        except:
            pass

    return l

out = []
pages = 8
for link in links:
    for page in range(1, pages):
        l = get_data(link, page)
        out.extend(l)

print("I'm Here")

def get_details_movies(id, name, link):
    headers = {
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
        'accept-language': 'en-US,en;q=0.9,fa;q=0.8',
        'cache-control': 'max-age=0',
        'priority': 'u=0, i',
        'referer': 'https://zhomis.info/all-movie/page/2/',
        'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"macOS"',
        'sec-fetch-dest': 'document',
        'sec-fetch-mode': 'navigate',
        'sec-fetch-site': 'same-origin',
        'sec-fetch-user': '?1',
        'upgrade-insecure-requests': '1',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
    }

    response = safe_get(link, headers=headers)
    if not response:
        print(f"Failed to get details for movie {id}")
        return

    soup = BeautifulSoup(response.text, 'html.parser')

    imdb = ''
    try:
        for alla in soup.find_all('a'):
            if '/title/' in str(alla['href']):
                imdb = str(alla['href']).split('/')[-2].strip()
                break
    except:
        pass

    try:
        get_links_movie(id, name, imdb)
    except:
        pass
    try:
        get_links_serial(id, name, imdb)
    except:
        pass

    print(imdb)

links = list(set(out))
for x in links:
    try:
        get_details_movies(x[0], x[1], x[2])
    except:
        pass
