/**
 * ملف الدوال المساعدة العامة
 * المسار: /assets/js/utils.js
 */

const Utils = {
    /**
     * توليد رقم عشوائي
     */
    randomNumber(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    },
    
    /**
     * نسخ نص إلى الحافظة
     */
    copyToClipboard(text) {
        navigator.clipboard.writeText(text).then(() => {
            showMessage('تم النسخ', 'success');
        }).catch(() => {
            alert('فشل النسخ');
        });
    },
    
    /**
     * تحميل ملف
     */
    downloadFile(url, filename) {
        const a = document.createElement('a');
        a.href = url;
        a.download = filename;
        a.click();
    },
    
    /**
     * تحميل ملف PDF
     */
    downloadPDF(content, filename) {
        const blob = new Blob([content], { type: 'application/pdf' });
        const url = URL.createObjectURL(blob);
        this.downloadFile(url, filename);
        URL.revokeObjectURL(url);
    },
    
    /**
     * تحميل JSON
     */
    downloadJSON(data, filename) {
        const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });
        const url = URL.createObjectURL(blob);
        this.downloadFile(url, filename);
        URL.revokeObjectURL(url);
    },
    
    /**
     * الحصول معاملات URL
     */
    getUrlParams() {
        const params = new URLSearchParams(window.location.search);
        const result = {};
        for (const [key, value] of params) {
            result[key] = value;
        }
        return result;
    },
    
    /**
     * إضافة معاملات URL
     */
    setUrlParams(params) {
        const url = new URL(window.location.href);
        Object.keys(params).forEach(key => {
            url.searchParams.set(key, params[key]);
        });
        window.history.pushState({}, '', url);
    },
    
    /**
     * إزالة معاملات URL
     */
    removeUrlParams(keys) {
        const url = new URL(window.location.href);
        keys.forEach(key => {
            url.searchParams.delete(key);
        });
        window.history.pushState({}, '', url);
    },
    
    /**
     * التحقق من قيمة بين مدى
     */
    inRange(value, min, max) {
        return value >= min && value <= max;
    },
    
    /**
     * تحويل إلى رقم
     */
    toNumber(value, defaultValue = 0) {
        const num = parseFloat(value);
        return isNaN(num) ? defaultValue : num;
    },
    
    /**
     * تقريب رقم
     */
    round(value, decimals = 2) {
        return Number(Math.round(value + 'e' + decimals) + 'e-' + decimals);
    },
    
    /**
     * إظهار محمل
     */
    showLoader(container, message = 'جاري التحميل...') {
        const loader = document.createElement('div');
        loader.className = 'loader-container';
        loader.innerHTML = `
            <div class="spinner"></div>
            <p>${message}</p>
        `;
        container.innerHTML = '';
        container.appendChild(loader);
    },
    
    /**
     * إخفاء محمل
     */
    hideLoader(container) {
        const loader = container.querySelector('.loader-container');
        if (loader) loader.remove();
    },
    
    /**
     * إظهار خطأ
     */
    showError(container, message, retry = null) {
        const error = document.createElement('div');
        error.className = 'error-container';
        error.innerHTML = `
            <i class="fas fa-exclamation-circle"></i>
            <p>${message}</p>
            ${retry ? '<button onclick="retry()" class="btn-retry">إعادة المحاولة</button>' : ''}
        `;
        container.innerHTML = '';
        container.appendChild(error);
    },
    
    /**
     * إظهار فارغ
     */
    showEmpty(container, message = 'لا توجد بيانات', icon = 'fa-inbox') {
        const empty = document.createElement('div');
        empty.className = 'empty-container';
        empty.innerHTML = `
            <i class="fas ${icon}"></i>
            <p>${message}</p>
        `;
        container.innerHTML = '';
        container.appendChild(empty);
    },
    
    /**
     * التحقق من الصور
     */
    validateImage(file) {
        const validTypes = ['image/jpeg', 'image/png', 'image/jpg', 'image/gif'];
        const maxSize = 5 * 1024 * 1024; // 5MB
        
        if (!validTypes.includes(file.type)) {
            return { valid: false, message: 'نوع الصورة غير مدعوم' };
        }
        
        if (file.size > maxSize) {
            return { valid: false, message: 'حجم الصورة كبير جداً (الحد الأقصى 5MB)' };
        }
        
        return { valid: true };
    },
    
    /**
     * معاينة الصورة
     */
    previewImage(input, imgElement) {
        if (input.files && input.files[0]) {
            const reader = new FileReader();
            reader.onload = (e) => {
                imgElement.src = e.target.result;
            };
            reader.readAsDataURL(input.files[0]);
        }
    },
    
    /**
     * توليد رمز QR
     */
    generateQRCode(element, text, size = 128) {
        if (typeof QRCode === 'undefined') {
            console.error('QRCode library not loaded');
            return;
        }
        
        new QRCode(element, {
            text: text,
            width: size,
            height: size
        });
    }
};

window.Utils = Utils;