import requests
import json
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 = {
    "label": "",               # سيتم تعيينه لاحقًا باسم الفيلم
    "quality": "HD سيرفر رئيسي متعدد الجودة",
    "order": 1,
    "status": 1,
    "source": "M3u8",
    "size": "",
    "intro_start": "",
    "intro_end": "",
    "end_credits_marker": 0,
    "link_type": 0,
    "drm_uuid": "",
    "drm_license_uri": ""
}

# عنوان URL لنقطة النهاية لإضافة الأفلام
add_api_url = 'https://iptv.xonegold.com/addmovies/add_movie_link'

# جلب بيانات الفيلم من API الجديد
def fetch_movie(session, series_name):
    api_url = f'https://iptv.xonegold.com/vidguard/go?series_name={series_name}'
    try:
        response = session.get(api_url)
        if response.status_code == 200:
            try:
                data = response.json()
                if isinstance(data, list) and len(data) > 0:
                    movie_data = {
                        "label": data[0].get("movie_name", ""),  # تعيين اسم الفيلم في label
                        "url": data[0].get("url", "")  # استخراج الرابط
                    }
                    return movie_data
                else:
                    print(f"لا توجد بيانات صالحة لـ {series_name}")
                    return {}
            except json.JSONDecodeError:
                print(f"لا يمكن تحليل البيانات كـ JSON لـ {series_name}: {response.text}")
                return {}
        else:
            print(f"حدث خطأ في جلب بيانات الفيلم من {series_name}: {response.status_code} - {response.text}")
            return {}
    except requests.RequestException as e:
        print(f"حدث خطأ غير متوقع أثناء جلب بيانات الفيلم من {series_name}: {str(e)}")
        return {}

# قراءة روابط الأفلام والمعرفات من ملف JSON
def read_movie_ids(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        movie_ids = json.load(file)
        return movie_ids

# إضافة الفيلم إلى قاعدة البيانات
def add_movie_link(session, data):
    try:
        if 'url' not in data or 'movie_id' not in data:
            raise ValueError("تفتقر البيانات إلى المفاتيح 'url' أو 'movie_id'")
        
        print(f"البيانات المرسلة: {data}")
        response = session.post(add_api_url, json=data)
        if response.status_code == 200:
            print(f"تمت إضافة الفيلم بنجاح!")
        else:
            print(f"حدث خطأ في إضافة الفيلم: {response.status_code} - {response.text}")
    except Exception as e:
        print(f"حدث خطأ غير متوقع أثناء إضافة الفيلم: {str(e)}")

# تشغيل السكربت بزيارة نقطة النهاية '/start'
@app.route('/start')
def start_script():
    session = requests.Session()
    movie_ids = read_movie_ids('movie_links.json')  # قراءة المعرفات
    
    for series_name, movie_id in movie_ids.items():
        movie_data = fetch_movie(session, series_name)
        if movie_data:
            data = static_data.copy()
            data.update({
                "label": movie_data.get("label"),  # تحديث label باسم الفيلم
                "url": movie_data.get("url"),
                "movie_id": movie_id
            })
            print(f"بيانات الفيلم المحدثة: {data}")
            add_movie_link(session, data)
            time.sleep(random.uniform(1, 5))  # استراحة بين الطلبات
        else:
            print(f"فشل في جلب بيانات الفيلم من {series_name}")
        time.sleep(random.uniform(5, 10))  # استراحة بين الأفلام
    return jsonify({"message": "Script started successfully."})

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

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