"""
Shared Data Loader Module
يتم تحميل البيانات من API مرة واحدة فقط ومشاركتها بين جميع السكريبتات
"""

import requests
import json


class DataLoader:
    """
    كلاس لتحميل البيانات من API مرة واحدة
    """
    
    _instance = None
    _data = None
    _loaded = False
    
    def __new__(cls):
        """Singleton pattern - نسخة واحدة فقط من الكلاس"""
        if cls._instance is None:
            cls._instance = super(DataLoader, cls).__new__(cls)
        return cls._instance
    
    def __init__(self):
        """تهيئة الكلاس"""
        self.api_url = "http://quality.kalamcxapp.site/zoho_quality/export.php"
    
    def safe_json(self, response):
        """
        تحويل الاستجابة إلى JSON بشكل آمن
        """
        if not response.text.strip():
            return []
        
        try:
            return response.json()
        except Exception as e:
            print(f"[!] Error parsing JSON: {e}")
            print(f"[!] Response (first 200 chars): {response.text[:200]}")
            return []
    
    def load_data(self, force_reload=False):
        """
        تحميل البيانات من API
        
        Args:
            force_reload (bool): إعادة تحميل البيانات حتى لو كانت محملة مسبقاً
            
        Returns:
            list: قائمة البيانات المحملة
        """
        # إذا كانت البيانات محملة مسبقاً ولا نريد إعادة التحميل
        if self._loaded and not force_reload:
            print("[*] Using cached data...")
            return self._data
        
        # تحميل البيانات من API
        print("[*] Fetching data from API...")
        try:
            response = requests.get(self.api_url, timeout=30)
            print(f"[*] API Response Status: {response.status_code}")
            
            if response.status_code == 200:
                self._data = self.safe_json(response)
                self._loaded = True
                print(f"[*] Total items loaded: {len(self._data)}")
                return self._data
            else:
                print(f"[!] API returned status code: {response.status_code}")
                return []
                
        except requests.exceptions.RequestException as e:
            print(f"[!] Error fetching data from API: {e}")
            return []
    
    def get_data(self):
        """
        الحصول على البيانات المحملة
        
        Returns:
            list: قائمة البيانات
        """
        if not self._loaded:
            return self.load_data()
        return self._data
    
    def get_count(self):
        """
        الحصول على عدد العناصر المحملة
        
        Returns:
            int: عدد العناصر
        """
        if not self._loaded:
            self.load_data()
        return len(self._data) if self._data else 0
    
    def filter_by_database(self, database_name):
        """
        فلترة البيانات حسب اسم قاعدة البيانات
        
        Args:
            database_name (str): اسم قاعدة البيانات
            
        Returns:
            list: قائمة البيانات المفلترة
        """
        if not self._loaded:
            self.load_data()
        
        if not self._data:
            return []
        
        return [
            item for item in self._data 
            if isinstance(item, dict) and item.get("database") == database_name
        ]


# =========================================
# دالة مساعدة للاستخدام السريع
# =========================================
def get_shared_data():
    """
    دالة مساعدة للحصول على البيانات المشتركة
    
    Returns:
        list: قائمة البيانات
    """
    loader = DataLoader()
    return loader.get_data()


def get_data_count():
    """
    دالة مساعدة للحصول على عدد العناصر
    
    Returns:
        int: عدد العناصر
    """
    loader = DataLoader()
    return loader.get_count()

