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

app = Flask(__name__)

# إنشاء جلسة Requests مع User-Agent مزيف
ua = UserAgent()
user_agent = ua.random
session = requests.Session()
session.headers.update({'User-Agent': user_agent})


def get_best_quality_url(page_url):
    """جلب رابط المشاهدة الأعلى جودة من صفحة (حلقة أو فيلم)"""
    r = session.get(page_url)
    if r.status_code != 200:
        return None

    soup = BeautifulSoup(r.text, "html.parser")
    servers = soup.select("div.WatchServers ul.WatchServersList li btn")

    quality_links = []
    for server in servers:
        data_url = server.get("data-url")
        quality_text = server.text.strip()

        # استخراج الجودة مثلاً (1080p)
        match = re.search(r"\((\d{3,4}p)\)", quality_text)
        if match:
            quality = int(match.group(1).replace("p", ""))
            quality_links.append((quality, data_url))

    if not quality_links:
        return None

    # اختيار أعلى جودة
    best_quality = max(quality_links, key=lambda x: x[0])
    return best_quality[1]


def scrape_series(series_url):
    """جلب جميع الحلقات وروابط المشاهدة"""
    r = session.get(series_url)
    if r.status_code != 200:
        return {"error": "فشل في تحميل صفحة المسلسل"}

    soup = BeautifulSoup(r.text, "html.parser")
    episodes = soup.select("div.Episodes--Seasons--Episodes a")

    episodes_data = []
    for ep in episodes:
        ep_name = ep.select_one("episodetitle").text.strip()
        ep_url = ep.get("href")

        # استخراج رقم الحلقة من الاسم
        match = re.search(r"(\d+)", ep_name)
        ep_number = int(match.group(1)) if match else None

        # جلب رابط المشاهدة الأعلى جودة
        final_url = get_best_quality_url(ep_url)

        episodes_data.append({
            "Episoade_Name": ep_name,
            "episoade_order": ep_number,
            "url": final_url
        })

    # ترتيب الحلقات حسب الرقم (تصاعدياً)
    episodes_data.sort(key=lambda x: x["episoade_order"] if x["episoade_order"] else 0)

    return {
        "episodes": episodes_data,
        "success": True,
        "total_episodes": len(episodes_data)
    }


def scrape_movie(movie_url):
    """جلب اسم الفيلم ورابط المشاهدة الأعلى جودة"""
    r = session.get(movie_url)
    if r.status_code != 200:
        return {"error": "فشل في تحميل صفحة الفيلم"}

    soup = BeautifulSoup(r.text, "html.parser")

    # استخراج اسم الفيلم
    h1 = soup.select_one("h1[itemprop='name']")
    movie_name = h1.get_text(" ", strip=True) if h1 else "غير معروف"

    # إزالة كلمة "مشاهدة فيلم"
    movie_name = movie_name.replace("مشاهدة فيلم", "").strip()

    # إزالة أي شيء بين أقواس (مثلاً (2025))
    movie_name = re.sub(r"\(.*?\)", "", movie_name).strip()

    # جلب رابط المشاهدة الأعلى جودة
    best_url = get_best_quality_url(movie_url)

    return {
        "Movie_Name": movie_name,
        "url": best_url,
        "success": True
    }


@app.route("/api/series")
def api_series():
    series_url = request.args.get("series_url")
    if not series_url:
        return jsonify({"error": "يرجى تمرير series_url"}), 400

    data = scrape_series(series_url)
    return jsonify(data)


@app.route("/api/movie")
def api_movie():
    movie_url = request.args.get("movie_url")
    if not movie_url:
        return jsonify({"error": "يرجى تمرير movie_url"}), 400

    data = scrape_movie(movie_url)
    return jsonify(data)


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