from flask import Flask, request, jsonify
import requests
from bs4 import BeautifulSoup
import re

app = Flask(__name__)

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}

session = requests.Session()
session.headers.update(headers)

@app.route('/')
def home():
    return "Welcome to **Xonegold Group** 👋 - Contact with me *Team Xonegold Group*"

@app.route('/go', methods=['GET'])
def scrape_series():
    series_url = request.args.get('series_url')
    if series_url:
        series_data = get_series_data(series_url)
        if series_data:
            return jsonify(series_data)
        else:
            return jsonify({"error": "Failed to fetch series data. Please check the series URL or try again later."}), 500
    return jsonify({"error": "No series URL provided. Please provide a valid series URL in the query parameter 'series_url'."}), 400

def get_iframe_link(episode_link):
    response = session.get(episode_link)
    soup = BeautifulSoup(response.content, "html.parser")
    iframe_element = soup.select_one("div.player--iframe iframe")
    iframe_link = iframe_element["src"] if iframe_element else "No Iframe"
    return iframe_link

def calculate_episode_number(season_number, episode_number, episodes_per_season=10):
    """
    احسب رقم الحلقة بناءً على الموسم ورقم الحلقة في ذلك الموسم.
    :param season_number: رقم الموسم
    :param episode_number: رقم الحلقة في ذلك الموسم
    :param episodes_per_season: عدد الحلقات في كل موسم (يمكن تغييره إذا كان يختلف بين المواسم)
    :return: الرقم الفريد للحلقة
    """
    return (season_number - 1) * episodes_per_season + episode_number

def get_episodes_from_season(season_link, season_number):
    response = session.get(season_link)
    soup = BeautifulSoup(response.content, "html.parser")
    episodes = []

    episode_items = soup.select("div.row a")
    for item in episode_items:
        episode_title_element = item.find("div", class_="ep-info").find("h2") if item.find("div", "ep-info") else None
        episode_title = episode_title_element.get_text(strip=True) if episode_title_element else "No Title"
        
        episode_link = item["href"] if item else "No Link"
        episode_link += "watch/"  # إضافة كلمة "watch" إلى نهاية الرابط

        iframe_link = get_iframe_link(episode_link)  # استخراج رابط iframe

        # استخراج رقم الحلقة ورقم الموسم من العنوان
        episode_number = extract_episode_number(episode_title)

        # حساب الرقم الفريد للحلقة
        unique_episode_number = calculate_episode_number(season_number, episode_number)

        episodes.append({
            "episode_name": episode_title,
            "episode_order": unique_episode_number,
            "season": season_number,
            "url": iframe_link
        })

    # ترتيب الحلقات بناءً على رقم الحلقة
    episodes.sort(key=lambda ep: (ep["episode_order"] if isinstance(ep["episode_order"], int) else float('inf')))
    
    return episodes

def extract_episode_number(episode_title):
    # البحث عن رقم الحلقة باستخدام تعبير نمطي
    match = re.search(r"الحلقة\s*(\d+)", episode_title)
    if match:
        return int(match.group(1))
    return 1  # تعيين رقم افتراضي في حال عدم العثور على رقم الحلقة

def get_seasons_from_series(series_link):
    response = session.get(series_link)
    soup = BeautifulSoup(response.content, "html.parser")
    seasons = []

    season_items = soup.select("div.Small--Box.Season")
    for item in season_items:
        season_element = item.find("div", class_="epnum")
        season_number = int(season_element.get_text(strip=True).replace("الموسم", "").strip()) if season_element else 1
        
        season_link_element = item.find("a")
        season_link = season_link_element["href"] if season_link_element else "No Link"
        
        episodes = get_episodes_from_season(season_link, season_number)
        
        seasons.append({
            "season": season_number,
            "episodes": episodes
        })

    return seasons

def get_series_data(series_link):
    response = session.get(series_link)
    soup = BeautifulSoup(response.content, "html.parser")

    # جلب جميع الحلقات
    series_data = []

    # جلب المواسم
    seasons = get_seasons_from_series(series_link)
    
    # دمج جميع الحلقات في قائمة واحدة
    for season in seasons:
        for episode in season["episodes"]:
            episode["season"] = season["season"]  # إضافة رقم الموسم إلى كل حلقة
            series_data.append(episode)

    return series_data

if __name__ == '__main__':
    app.run(debug=True)
