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

app = Flask(__name__)

# توليد User-Agent مزيفة
ua = UserAgent()
user_agent = ua.random

# إنشاء جلسة Requests
session = requests.Session()
session.headers.update({'User-Agent': user_agent})

BASE_URL = "https://web.cimafree.vip"

@app.route('/api/series', methods=['GET'])
def fetch_series_data():
    try:
        series_url = request.args.get('series_url')
        if not series_url:
            return jsonify({"success": False, "message": "يرجى تقديم رابط المسلسل في معلمة series_url"}), 400

        response = session.get(series_url)
        if response.status_code != 200:
            return jsonify({"success": False, "message": "فشل في جلب صفحة الويب"}), 400

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

        episodes_list = soup.find('ul', class_='s')
        if not episodes_list:
            return jsonify({"success": False, "message": "لم يتم العثور على قائمة الحلقات"}), 400

        episode_links = episodes_list.find_all('a')
        
        last_episode_url = None  # لتخزين رابط الحلقة السابقة

        for link in episode_links:
            full_title = link['title']
            
            # استخراج اسم الحلقة المنسق (الحلقة X)
            episode_name_match = re.search(r'(الحلقة \d+)', full_title)
            if not episode_name_match:
                continue
            episode_name = episode_name_match.group(1)
            
            # استخراج رقم الحلقة
            episode_number_match = re.search(r'الحلقة (\d+)', full_title)
            episode_number = int(episode_number_match.group(1))
            
            episode_url = BASE_URL + '/' + link['href']
            
            # تعديل الرابط للحصول على السيرفرات (watch.php → play.php)
            episode_servers_url = episode_url.replace("watch.php", "play.php")
            server_response = session.get(episode_servers_url)
            if server_response.status_code != 200:
                continue
            
            server_soup = BeautifulSoup(server_response.text, 'html.parser')
            server_ul = server_soup.find('ul', class_='WatchList')
            if not server_ul:
                continue
            
            preferred_server = None
            fallback_server = None
            
            servers = server_ul.find_all('li')
            for server in servers:
                if not server.has_attr('data-embed-url'):
                    continue
                    
                embed_url = server['data-embed-url']
                
                # البحث عن السيرفر المفضل (filehd.cc)
                if "filehd.cc" in embed_url:
                    # إزالة كلمة embed- من الرابط
                    preferred_server = embed_url.replace("embed-", "")
                    break
                # السيرفر الاحتياطي (lulu.st)
                elif "lulu.st" in embed_url and not fallback_server:
                    fallback_server = embed_url
            
            final_url = preferred_server if preferred_server else fallback_server

            # تخطي الحلقة إذا كان رابطها مكررًا
            if final_url == last_episode_url:
                continue  

            last_episode_url = final_url  # تحديث الرابط الأخير
            
            if final_url:
                episodes_data.append({
                    "Episoade_Name": episode_name,  # استخدام اسم الحلقة المنسق فقط
                    "episoade_order": episode_number,
                    "url": final_url
                })
        
        return jsonify({"success": True, "episodes": episodes_data}), 200

    except Exception as e:
        return jsonify({"success": False, "message": str(e)}), 500
        
@app.route('/api/movie', methods=['GET'])
def fetch_movie_data():
    try:
        movie_url = request.args.get('movie_url')
        if not movie_url:
            return jsonify({"success": False, "message": "يرجى تقديم رابط الفيلم في معلمة movie_url"}), 400

        # جلب صفحة watch.php لاستخراج اسم الفيلم
        watch_response = session.get(movie_url)
        if watch_response.status_code != 200:
            return jsonify({"success": False, "message": "فشل في جلب صفحة الفيلم"}), 400

        watch_soup = BeautifulSoup(watch_response.text, 'html.parser')

        # محاولة استخراج الاسم من <title>
        movie_name = None
        title_tag = watch_soup.find('title')
        if title_tag:
            raw_title = title_tag.text.strip()

            # تنظيف العنوان من الكلمات الزائدة
            movie_name = raw_title
            movie_name = re.sub(r'(?i)^مشاهدة\s+فيلم\s*', '', movie_name)
            movie_name = re.sub(r'\s*(كامل|اون\s*لاين|مترجم|HD|اونلاين)\s*', ' ', movie_name)
            movie_name = re.sub(r'\s+', ' ', movie_name).strip()
            movie_name = f"HD فيلم {movie_name}"

        # احتياطي: استخدام <h1> إن لم يتمكن من استخلاص الاسم
        if not movie_name:
            h1_tag = watch_soup.find('h1')
            if h1_tag:
                movie_name = h1_tag.text.strip()
            else:
                movie_name = "فيلم غير معروف"

        # تحويل الرابط إلى play.php
        movie_play_url = movie_url.replace("watch.php", "play.php")
        play_response = session.get(movie_play_url)
        if play_response.status_code != 200:
            return jsonify({"success": False, "message": "فشل في جلب صفحة التشغيل"}), 400

        play_soup = BeautifulSoup(play_response.text, 'html.parser')
        server_ul = play_soup.find('ul', class_='WatchList')
        if not server_ul:
            return jsonify({"success": False, "message": "لم يتم العثور على السيرفرات"}), 400

        preferred_server = None
        fallback_server = None

        servers = server_ul.find_all('li')
        for server in servers:
            if not server.has_attr('data-embed-url'):
                continue

            embed_url = server['data-embed-url']

            if "filehd.cc" in embed_url:
                preferred_server = embed_url.replace("embed-", "")
                break
            elif "lulu.st" in embed_url and not fallback_server:
                fallback_server = embed_url

        final_url = preferred_server if preferred_server else fallback_server
        if not final_url:
            return jsonify({"success": False, "message": "لم يتم العثور على رابط تشغيل صالح"}), 400

        return jsonify({
            "movie": {
                "Movie_Name": movie_name,
                "url": final_url
            },
            "success": True
        }), 200

    except Exception as e:
        return jsonify({"success": False, "message": str(e)}), 500



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