/**
 * ملف API.js - طبقة الوسطى للربط بين HTML و PHP
 * المسار: /assets/js/api.js
 * الوظيفة: توحيد جميع طلبات API في مكان واحد
 */

const API = {
    // ============================================
    // الإعدادات الأساسية
    // ============================================
    BASE_URL: '/backend/api',
    
    /**
     * الحصول على التوكن من localStorage
     */
    getToken() {
        return localStorage.getItem('token');
    },
    
    /**
     * الحصول على المستخدم الحالي
     */
    getCurrentUser() {
        const userStr = localStorage.getItem('user');
        return userStr ? JSON.parse(userStr) : null;
    },
    
    // ============================================
    // دوال المساعدة (المنخفضة المستوى)
    // ============================================
    
    /**
     * طلب GET أساسي
     */
    async get(endpoint, params = {}) {
        const url = new URL(this.BASE_URL + endpoint, window.location.origin);
        Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));
        
        const response = await fetch(url, {
            method: 'GET',
            headers: this.getHeaders()
        });
        
        return this.handleResponse(response);
    },
    
    /**
     * طلب POST أساسي
     */
    async post(endpoint, data = {}) {
        const response = await fetch(this.BASE_URL + endpoint, {
            method: 'POST',
            headers: this.getHeaders(),
            body: JSON.stringify(data)
        });
        
        return this.handleResponse(response);
    },
    
    /**
     * طلب PUT أساسي
     */
    async put(endpoint, data = {}) {
        const response = await fetch(this.BASE_URL + endpoint, {
            method: 'PUT',
            headers: this.getHeaders(),
            body: JSON.stringify(data)
        });
        
        return this.handleResponse(response);
    },
    
    /**
     * طلب DELETE أساسي
     */
    async delete(endpoint, data = {}) {
        const response = await fetch(this.BASE_URL + endpoint, {
            method: 'DELETE',
            headers: this.getHeaders(),
            body: JSON.stringify(data)
        });
        
        return this.handleResponse(response);
    },
    
    /**
     * رفع ملفات
     */
    async upload(endpoint, formData) {
        const response = await fetch(this.BASE_URL + endpoint, {
            method: 'POST',
            headers: {
                'Authorization': 'Bearer ' + (this.getToken() || '')
            },
            body: formData
        });
        
        return this.handleResponse(response);
    },
    
    /**
     * تجهيز الهيدرات
     */
    getHeaders() {
        const headers = {
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        };
        
        const token = this.getToken();
        if (token) {
            headers['Authorization'] = 'Bearer ' + token;
        }
        
        return headers;
    },
    
    /**
     * معالجة الاستجابة
     */
    async handleResponse(response) {
        if (!response.ok) {
            if (response.status === 401) {
                // توكن غير صالح - تسجيل خروج تلقائي
                this.logout();
                window.location.href = '/frontend/auth/login.html?session=expired';
                throw new Error('انتهت الجلسة');
            }
            
            const error = await response.json().catch(() => ({}));
            throw new Error(error.message || 'حدث خطأ في الاتصال');
        }
        
        return response.json();
    },
    
    /**
     * تسجيل الخروج
     */
    logout() {
        localStorage.removeItem('token');
        localStorage.removeItem('user');
        sessionStorage.clear();
    },

    // ============================================
    // دوال المصادقة
    // ============================================
    
    auth: {
        /**
         * تسجيل الدخول
         */
        async login(email, password, remember = false) {
            const response = await API.post('/auth/login.php', { email, password, remember });
            
            if (response.success) {
                localStorage.setItem('token', response.token || 'token-' + Date.now());
                localStorage.setItem('user', JSON.stringify(response.user));
            }
            
            return response;
        },
        
        /**
         * تسجيل مستخدم جديد
         */
        async register(userData) {
            return await API.post('/auth/register.php', userData);
        },
        
        /**
         * تسجيل الخروج
         */
        async logout() {
            await API.post('/auth/logout.php').catch(() => {});
            API.logout();
            window.location.href = '/frontend/auth/login.html';
        },
        
        /**
         * التحقق من الجلسة
         */
        async checkSession() {
            return await API.get('/auth/check.php');
        },
        
        /**
         * إعادة تعيين كلمة المرور
         */
        async resetPassword(email) {
            return await API.post('/auth/reset-password.php', { email });
        },
        
        /**
         * التحقق من رمز التحقق
         */
        async verifyCode(phone, code) {
            return await API.post('/auth/verify-phone.php', { phone, code });
        }
    },
    
    // ============================================
    // دوال العملاء
    // ============================================
    
    client: {
        /**
         * لوحة التحكم
         */
        async dashboard() {
            return await API.get('/client/dashboard.php');
        },
        
        /**
         * الملف الشخصي
         */
        async profile() {
            return await API.get('/client/profile.php');
        },
        
        /**
         * تحديث الملف الشخصي
         */
        async updateProfile(data) {
            return await API.put('/client/profile.php', data);
        },
        
        /**
         * قائمة الطلبات
         */
        async getRequests(params = {}) {
            return await API.get('/client/requests.php', params);
        },
        
        /**
         * تفاصيل طلب
         */
        async getRequest(id) {
            return await API.get('/client/requests.php', { id });
        },
        
        /**
         * إنشاء طلب جديد
         */
        async createRequest(data) {
            return await API.post('/client/requests.php', data);
        },
        
        /**
         * قائمة المركبات
         */
        async getVehicles() {
            return await API.get('/client/vehicles.php');
        },
        
        /**
         * إضافة مركبة
         */
        async addVehicle(data) {
            return await API.post('/client/vehicles.php', data);
        },
        
        /**
         * تحديث مركبة
         */
        async updateVehicle(data) {
            return await API.put('/client/vehicles.php', data);
        },
        
        /**
         * حذف مركبة
         */
        async deleteVehicle(id) {
            return await API.delete('/client/vehicles.php', { id });
        },
        
        /**
         * قائمة الشهادات
         */
        async getCertificates() {
            return await API.get('/client/certificates.php');
        },
        
        /**
         * تحميل شهادة
         */
        async downloadCertificate(id) {
            window.location.href = `/backend/api/client/download-certificate.php?id=${id}`;
        },
        
        /**
         * المدفوعات
         */
        async getPayments() {
            return await API.get('/client/payments.php');
        },
        
        /**
         * تأكيد الدفع
         */
        async confirmPayment(requestId, amount, method, receiptFile) {
            const formData = new FormData();
            formData.append('request_id', requestId);
            formData.append('amount', amount);
            formData.append('method', method);
            if (receiptFile) {
                formData.append('receipt', receiptFile);
            }
            
            return await API.upload('/client/payments.php', formData);
        }
    },
    
    // ============================================
    // دوال الفاحصين
    // ============================================
    
    inspector: {
        /**
         * لوحة التحكم
         */
        async dashboard() {
            return await API.get('/inspector/dashboard.php');
        },
        
        /**
         * قائمة الفحوصات
         */
        async getInspections(params = {}) {
            return await API.get('/inspector/inspections.php', params);
        },
        
        /**
         * تفاصيل فحص
         */
        async getInspection(id) {
            return await API.get('/inspector/inspections.php', { id });
        },
        
        /**
         * بدء فحص
         */
        async startInspection(id) {
            return await API.put('/inspector/inspections.php', { id, status: 'in_progress' });
        },
        
        /**
         * إكمال فحص
         */
        async completeInspection(id, results) {
            return await API.put('/inspector/inspections.php', { 
                id, 
                status: 'completed',
                results 
            });
        },
        
        /**
         * إضافة نتائج فحص
         */
        async addResults(id, data) {
            return await API.put('/inspector/inspections.php', { id, ...data });
        },
        
        /**
         * رفع صور
         */
        async uploadImages(requestId, files, type = 'inspection') {
            const formData = new FormData();
            formData.append('request_id', requestId);
            formData.append('image_type', type);
            
            for (let i = 0; i < files.length; i++) {
                formData.append('images[]', files[i]);
            }
            
            return await API.upload('/inspector/upload-images.php', formData);
        },
        
        /**
         * جدول المواعيد
         */
        async getSchedule(date) {
            return await API.get('/inspector/schedule.php', { date });
        }
    },
    
    // ============================================
    // دوال المشرفين
    // ============================================
    
    supervisor: {
        /**
         * لوحة التحكم
         */
        async dashboard() {
            return await API.get('/supervisor/dashboard.php');
        },
        
        /**
         * قائمة الفاحصين
         */
        async getInspectors() {
            return await API.get('/supervisor/inspectors.php');
        },
        
        /**
         * تفاصيل فاحص
         */
        async getInspector(id) {
            return await API.get('/supervisor/inspectors.php', { id });
        },
        
        /**
         * إضافة فاحص
         */
        async addInspector(data) {
            return await API.post('/supervisor/inspectors.php', data);
        },
        
        /**
         * تحديث فاحص
         */
        async updateInspector(data) {
            return await API.put('/supervisor/inspectors.php', data);
        },
        
        /**
         * حذف فاحص
         */
        async deleteInspector(id) {
            return await API.delete('/supervisor/inspectors.php', { id });
        },
        
        /**
         * طلبات معلقة
         */
        async getPendingRequests() {
            return await API.get('/supervisor/pending-requests.php');
        },
        
        /**
         * توزيع طلب على فاحص
         */
        async assignRequest(requestId, inspectorId, notes = '') {
            return await API.post('/supervisor/assign-inspector.php', {
                request_id: requestId,
                inspector_id: inspectorId,
                notes
            });
        },
        
        /**
         * تقارير يومية
         */
        async getDailyReport(date) {
            return await API.get('/supervisor/reports.php', { type: 'daily', date });
        },
        
        /**
         * تقارير أسبوعية
         */
        async getWeeklyReport(week) {
            return await API.get('/supervisor/reports.php', { type: 'weekly', week });
        },
        
        /**
         * تدقيق الجودة
         */
        async getAuditList() {
            return await API.get('/supervisor/quality-audit.php');
        },
        
        /**
         * اعتماد فحص
         */
        async approveInspection(id, notes = '') {
            return await API.post('/supervisor/quality-audit.php', { 
                id, 
                status: 'approved',
                notes 
            });
        },
        
        /**
         * رفض فحص
         */
        async rejectInspection(id, notes = '') {
            return await API.post('/supervisor/quality-audit.php', { 
                id, 
                status: 'rejected',
                notes 
            });
        },
        
        /**
         * شكاوى العملاء
         */
        async getComplaints() {
            return await API.get('/supervisor/complaints.php');
        },
        
        /**
         * حل شكوى
         */
        async resolveComplaint(id, resolution) {
            return await API.put('/supervisor/complaints.php', { id, resolution });
        }
    },
    
    // ============================================
    // دوال المدير
    // ============================================
    
    admin: {
        /**
         * لوحة التحكم
         */
        async dashboard() {
            return await API.get('/admin/dashboard.php');
        },
        
        /**
         * قائمة المستخدمين
         */
        async getUsers() {
            return await API.get('/admin/users.php');
        },
        
        /**
         * تفاصيل مستخدم
         */
        async getUser(id) {
            return await API.get('/admin/users.php', { id });
        },
        
        /**
         * إنشاء مستخدم
         */
        async createUser(data) {
            return await API.post('/admin/users.php', data);
        },
        
        /**
         * تحديث مستخدم
         */
        async updateUser(data) {
            return await API.put('/admin/users.php', data);
        },
        
        /**
         * حذف مستخدم
         */
        async deleteUser(id) {
            return await API.delete('/admin/users.php', { id });
        },
        
        /**
         * إعدادات النظام
         */
        async getSettings() {
            return await API.get('/admin/settings.php');
        },
        
        /**
         * تحديث الإعدادات
         */
        async updateSettings(settings) {
            return await API.post('/admin/settings.php', settings);
        },
        
        /**
         * إحصائيات النظام
         */
        async getStatistics() {
            return await API.get('/admin/statistics.php');
        },
        
        /**
         * سجلات النظام
         */
        async getLogs() {
            return await API.get('/admin/logs.php');
        }
    },
    
    // ============================================
    // دوال مشتركة
    // ============================================
    
    common: {
        /**
         * رفع ملف
         */
        async uploadFile(file, type = 'general') {
            const formData = new FormData();
            formData.append('file', file);
            formData.append('type', type);
            
            return await API.upload('/common/upload.php', formData);
        },
        
        /**
         * الإشعارات
         */
        async getNotifications() {
            return await API.get('/common/notifications.php');
        },
        
        /**
         * تحديث حالة الإشعار
         */
        async markNotificationRead(id = null) {
            return await API.post('/common/notifications.php', { id });
        },
        
        /**
         * بحث عام
         */
        async search(query, type = 'all') {
            return await API.get('/common/search.php', { q: query, type });
        }
    },
    
    // ============================================
    // دوال الذكاء الاصطناعي
    // ============================================
    
    ai: {
        /**
         * تقدير قيمة السيارة
         */
        async estimateValue(vehicleData) {
            return await API.post('/ai/predict-value.php', vehicleData);
        },
        
        /**
         * فحص صحة المركبة
         */
        async healthCheck(vehicleId) {
            return await API.get('/ai/health-check.php', { vehicle_id: vehicleId });
        },
        
        /**
         * توصيات البيع والشراء
         */
        async getRecommendations(vehicleData) {
            return await API.post('/ai/recommendations.php', vehicleData);
        },
        
        /**
         * المساعد الذكي
         */
        async askAssistant(message) {
            return await API.post('/ai/assistant.php', { message });
        }
    }
};

// ============================================
// إضافة دوال مساعدة عامة
// ============================================

/**
 * تنسيق التاريخ
 */
function formatDate(dateString) {
    const date = new Date(dateString);
    return date.toLocaleDateString('ar-EG');
}

/**
 * تنسيق التاريخ والوقت
 */
function formatDateTime(dateString) {
    const date = new Date(dateString);
    return date.toLocaleString('ar-EG');
}

/**
 * تنسيق السعر
 */
function formatPrice(price) {
    return Number(price).toLocaleString('ar-EG') + ' ج.م';
}

/**
 * إظهار رسالة (يمكن استبدالها بـ toast أو alert)
 */
function showMessage(message, type = 'info') {
    const icons = {
        success: '✅',
        error: '❌',
        warning: '⚠️',
        info: 'ℹ️'
    };
    
    alert(`${icons[type]} ${message}`);
}

// تصدير الدوال العامة
window.API = API;
window.formatDate = formatDate;
window.formatDateTime = formatDateTime;
window.formatPrice = formatPrice;
window.showMessage = showMessage;