import requests
import json
import os
import time
import random
from flask import Flask, jsonify
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.interval import IntervalTrigger

app = Flask(__name__)

# البيانات الثابتة
static_data = {
    "episoade_image": "",
    "episoade_description": "",
    "downloadable": 0,
    "type": 0,
    "status": 1,
    "source": "Streamwish",
    "skip_available": 0,
    "intro_start": "",
    "intro_end": "",
    "end_credits_marker": 0,
    "drm_uuid": "UUID",
    "drm_license_uri": ""
}

# عنوان API لإضافة الحلقات
add_api_url = 'https://iptv.xonegold.com/add/add'

# جلب بيانات الحلقات من API المصدر
def fetch_episodes(session, series_url, season_id):
    api_url = f'https://iptv.xonegold.com/laroza/api/series?series_url={series_url}'
    try:
        response = session.get(api_url)
        if response.status_code == 200:
            try:
                data = response.json()
                episodes = data.get("episodes", [])  # استخراج الحلقات من مفتاح "episodes"
                formatted_episodes = [
                    {
                        "Episoade_Name": ep.get("Episoade_Name", ""),
                        "episoade_order": ep.get("episoade_order", ""),
                        "url": ep.get("url", "")
                    }
                    for ep in episodes
                ]
                return formatted_episodes, season_id
            except json.JSONDecodeError:
                print(f"❌ فشل تحليل JSON لـ {series_url}: {response.text}")
                return [], season_id
        else:
            print(f"❌ خطأ عند جلب البيانات من {series_url}: {response.status_code} - {response.text}")
            return [], season_id
    except requests.RequestException as e:
        print(f"❌ خطأ أثناء جلب البيانات من {series_url}: {str(e)}")
        return [], season_id

# تسجيل الحلقات المضافة مسبقًا
def add_to_previous_episodes(series_url, episode_id):
    previous_episodes = read_previous_episodes()
    if series_url not in previous_episodes:
        previous_episodes[series_url] = []
    if episode_id not in previous_episodes[series_url]:
        previous_episodes[series_url].append(episode_id)
    save_previous_episodes(previous_episodes)

# قراءة الحلقات المضافة سابقًا
def read_previous_episodes():
    if os.path.exists('save_episodes_data.json'):
        with open('save_episodes_data.json', 'r', encoding='utf-8') as file:
            return json.load(file)
    return {}

# حفظ الحلقات المضافة سابقًا
def save_previous_episodes(previous_episodes):
    with open('save_episodes_data.json', 'w', encoding='utf-8') as file:
        json.dump(previous_episodes, file, ensure_ascii=False, indent=4)

# إرسال البيانات إلى API الإضافة
def add_episode(session, data):
    try:
        response = session.post(add_api_url, json=data)
        if response.status_code == 200:
            print(f"✅ تمت إضافة الحلقة {data['Episoade_Name']} بنجاح!")
            add_to_previous_episodes(data['series_url'], data['episoade_order'])
        else:
            print(f"❌ فشل إضافة الحلقة {data['Episoade_Name']}: {response.status_code} - {response.text}")
    except Exception as e:
        print(f"❌ خطأ أثناء إضافة الحلقة {data['Episoade_Name']}: {str(e)}")

# قراءة بيانات المسلسلات من ملف JSON
def read_series_data(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        series_data = json.load(file)
        return series_data.items()

# تنفيذ السكربت الرئيسي
def execute_script():
    print("🚀 بدء تنفيذ السكربت...")
    session = requests.Session()
    series_data = read_series_data('series_links.json')

    for series_url, season_id in series_data:
        episodes, season_id = fetch_episodes(session, series_url, season_id)
        print(f"🔍 جلبت {len(episodes)} حلقة من {series_url}")

        for episode in episodes:
            episode_id = episode.get("episoade_order")
            if episode_id not in read_previous_episodes().get(series_url, []):
                data = static_data.copy()
                data.update({
                    "series_url": series_url,
                    "season_id": season_id,
                    "Episoade_Name": episode.get("Episoade_Name"),
                    "episoade_order": episode_id,
                    "url": episode.get("url")
                })
                add_episode(session, data)
                time.sleep(random.uniform(1, 5))  # استراحة بين الطلبات
            else:
                print(f"⚠️ الحلقة {episode_id} مضافة مسبقًا من {series_url}")

        print_series_added(series_url)
        time.sleep(random.uniform(5, 10))  # استراحة بين المسلسلات

    print("✅ تنفيذ السكربت انتهى.")

# تشغيل السكربت من خلال `/start`
@app.route('/start')
def start_script():
    execute_script()
    return jsonify({"message": "🚀 تم تشغيل السكربت بنجاح!"})

# التحديث التلقائي كل ساعة
scheduler = BackgroundScheduler()
scheduler.add_job(execute_script, trigger=IntervalTrigger(hours=1))
scheduler.start()

# طباعة رسالة بعد انتهاء إضافة مسلسل
def print_series_added(series_url):
    print(f"✅ تم إضافة جميع الحلقات من {series_url}")

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