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

app = Flask(__name__)
session = requests.Session()

# البيانات الثابتة
static_data = {
    "label": "SERVER 1",               
    "quality": "FHD سيرفر رئيسي متعدد الجودة",  
    "order": 1,                        
    "status": 1,                       
    "source": "Streamwish",            
    "size": "",                        
    "intro_start": "",                 
    "intro_end": "",                   
    "end_credits_marker": 0,           
    "link_type": 0,                    
    "drm_uuid": "",                    
    "drm_license_uri": "",             
    "skip_available": 0                
}

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

# ملف لتسجيل الأفلام المرسلة
sent_file = "sent_movies.json"

# تحميل الأفلام المرسلة مسبقًا
def load_sent_movies():
    try:
        with open(sent_file, 'r', encoding='utf-8') as f:
            return json.load(f)
    except FileNotFoundError:
        return []

# حفظ الفيلم بعد الإرسال
def save_sent_movie(movie_url):
    sent = load_sent_movies()
    sent.append(movie_url)
    with open(sent_file, 'w', encoding='utf-8') as f:
        json.dump(sent, f, ensure_ascii=False, indent=2)

# جلب اسم الفيلم من الصفحة
def fetch_movie_name(movie_url):
    try:
        with open('movie_list.json', 'r', encoding='utf-8') as f:
            movie_list = json.load(f)
        
        for movie in movie_list:
            if movie['link'] == movie_url:
                movie_name = movie['name']
                # إزالة كلمة "مترجم" إذا كانت موجودة
                movie_name = movie_name.replace('مترجم', '').strip()
                return movie_name
        
        print(f"لم يتم العثور على اسم الفيلم في movie_list.json: {movie_url}")
        return None
    except Exception as e:
        print(f"حدث خطأ أثناء جلب اسم الفيلم من movie_list.json: {e}")
        return None


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

# إضافة الفيلم إلى قاعدة البيانات
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("تمت إضافة الفيلم بنجاح!")
        else:
            print(f"حدث خطأ في إضافة الفيلم: {response.status_code} - {response.text}")
    except Exception as e:
        print(f"حدث خطأ غير متوقع أثناء إضافة الفيلم: {str(e)}")

# تشغيل السكربت بزيارة نقطة النهاية '/start'
@app.route('/start')
def start_script():
    movie_ids = read_movie_ids('movie_links.json')
    sent = load_sent_movies()
    
    for movie_url, movie_id in movie_ids.items():
        if movie_url in sent:
            print(f"تخطي الفيلم لأنه تم إرساله مسبقًا: {movie_url}")
            continue
        
        movie_name = fetch_movie_name(movie_url)
        if movie_name:
            data = static_data.copy()
            data.update({
                "url": movie_url,
                "movie_id": movie_id,
                "label": movie_name
            })
            print(f"بيانات الفيلم المحدثة: {data}")
            add_movie_link(session, data)
            save_sent_movie(movie_url)
            time.sleep(random.uniform(5, 10))
        else:
            print(f"فشل في جلب اسم الفيلم من {movie_url}")
        time.sleep(random.uniform(2, 4))
        
    return jsonify({"message": "Script started successfully."})

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

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