/**
 * 📁 File Handler - إدارة استيراد وتصدير الملفات
 * يدعم CSV, Excel, TXT
 */

const FileHandler = {
    // ============================================================
    // استيراد الأرقام من ملف
    // ============================================================
    async importFile(file) {
        const extension = file.name.split('.').pop().toLowerCase();

        switch (extension) {
            case 'csv':
                return await this.parseCSV(file);
            case 'txt':
                return await this.parseTXT(file);
            case 'xlsx':
            case 'xls':
                return await this.parseExcel(file);
            default:
                throw new Error((typeof t === 'function' ? t('error.unsupportedFormat', 'صيغة غير مدعومة: ') : 'صيغة غير مدعومة: ') + extension);
        }
    },

    // ============================================================
    // قراءة CSV
    // ============================================================
    async parseCSV(file) {
        const text = await this.readFileAsText(file);
        // تقسيم الأسطر مع دعم جميع الصيغ (CRLF, LF, CR)
        const lines = text.split(/\r\n|\n|\r/).filter(line => line.trim());
        const contacts = [];

        // Regex للبحث عن أي تسلسل محتمل لرقم هاتف (أرقام، مسافات، فواصل)
        // يبدأ برقم أو +، ويحتوي على أرقام وفواصل، بطول 10 على الأقل
        const phoneCandidateRegex = /(?:\+|00|\d)(?:[\d\-\(\) ]){9,}/g;

        for (const line of lines) {
            // تقسيم السطر إلى خلايا
            const cells = line.split(/[,;\t]/);

            for (const cell of cells) {
                // البحث عن تطابقات داخل الخلية
                const matches = cell.match(phoneCandidateRegex);

                if (matches) {
                    for (const match of matches) {
                        // تنظيف الرقم والتحقق من صحته
                        const phone = this.cleanPhone(match);

                        // cleanPhone يتحقق بالفعل من أن الطول بين 10 و 15
                        if (phone) {
                            contacts.push({ phone, name: '' });
                        }
                    }
                }
            }
        }

        return contacts;
    },

    // ============================================================
    // قراءة TXT
    // ============================================================
    async parseTXT(file) {
        const text = await this.readFileAsText(file);
        const lines = text.split(/\r\n|\n|\r/).filter(line => line.trim());
        const contacts = [];

        for (const line of lines) {
            const phone = this.cleanPhone(line);
            if (phone) {
                contacts.push({ phone, name: '' });
            }
        }

        return contacts;
    },

    // ============================================================
    // قراءة Excel (بسيط - يحول لـ CSV)
    // ============================================================
    async parseExcel(file) {
        // نستخدم طريقة بسيطة لقراءة Excel كـ binary
        // ملاحظة: لقراءة Excel بشكل كامل يحتاج مكتبة مثل SheetJS
        return new Promise((resolve, reject) => {
            const reader = new FileReader();
            reader.onload = async (e) => {
                try {
                    // محاولة قراءة كنص (يعمل مع بعض ملفات xlsx البسيطة)
                    const text = e.target.result;
                    const contacts = [];

                    // استخراج الأرقام باستخدام regex
                    const phoneRegex = /\b\d{10,15}\b/g;
                    const matches = text.match(phoneRegex) || [];

                    for (const match of matches) {
                        const phone = this.cleanPhone(match);
                        if (phone) {
                            contacts.push({ phone, name: '' });
                        }
                    }

                    if (contacts.length === 0) {
                        reject(new Error(typeof t === 'function' ? t('error.noNumbersInExcel', 'لم يتم العثور على أرقام في الملف. جرب CSV بدلاً من ذلك.') : 'لم يتم العثور على أرقام في الملف. جرب CSV بدلاً من ذلك.'));
                    } else {
                        resolve(contacts);
                    }
                } catch (err) {
                    reject(new Error(typeof t === 'function' ? t('error.excelFailed', 'فشل قراءة ملف Excel. جرب تحويله لـ CSV.') : 'فشل قراءة ملف Excel. جرب تحويله لـ CSV.'));
                }
            };
            reader.onerror = () => reject(new Error(typeof t === 'function' ? t('error.readFailed', 'فشل قراءة الملف') : 'فشل قراءة الملف'));
            reader.readAsText(file);
        });
    },

    // ============================================================
    // تنظيف رقم الهاتف
    // ============================================================
    cleanPhone(input) {
        if (!input) return null;

        // إزالة كل شيء عدا الأرقام
        let phone = input.toString().replace(/\D/g, '');

        // التحقق من الطول
        if (phone.length < 10 || phone.length > 15) return null;

        // التحقق من أن الرقم يبدأ برقم صحيح (ليس صفر في البداية)
        if (!/^[1-9]/.test(phone)) return null;

        // فلترة إضافية: رفض الأرقام المتكررة (مثل 1111111111)
        if (/^(\d)\1{9,}$/.test(phone)) return null;

        return phone;
    },

    // ============================================================
    // قراءة ملف كنص
    // ============================================================
    readFileAsText(file) {
        return new Promise((resolve, reject) => {
            const reader = new FileReader();
            reader.onload = (e) => resolve(e.target.result);
            reader.onerror = () => reject(new Error(typeof t === 'function' ? t('error.readFailed', 'فشل قراءة الملف') : 'فشل قراءة الملف'));
            reader.readAsText(file);
        });
    },



    // ============================================================
    // تصدير JSON
    // ============================================================
    exportJSON(data, filename = 'wa_data') {
        const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });
        const url = URL.createObjectURL(blob);
        const a = document.createElement('a');
        a.href = url;
        a.download = `${filename}_${new Date().toISOString().slice(0, 10)}.json`;
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
        URL.revokeObjectURL(url);
    },

    // ============================================================
    // قراءة صورة كـ Base64
    // ============================================================
    readImageAsBase64(file) {
        return new Promise((resolve, reject) => {
            const reader = new FileReader();
            reader.onload = (e) => resolve(e.target.result);
            reader.onerror = () => reject(new Error(typeof t === 'function' ? t('error.imageFailed', 'فشل قراءة الصورة') : 'فشل قراءة الصورة'));
            reader.readAsDataURL(file);
        });
    },

    // ============================================================
    // التحقق من نوع الملف
    // ============================================================
    getFileType(file) {
        const type = file.type;
        if (type.startsWith('image/')) return 'image';
        if (type.startsWith('video/')) return 'video';
        if (type.includes('pdf')) return 'document';
        if (type.includes('word') || type.includes('document')) return 'document';
        return 'file';
    }
};

// تصدير للاستخدام العالمي
window.FileHandler = FileHandler;
