// ============================================
// ملف التكوين الموحد للمشرف
// ============================================

const APP_CONFIG = {
    // عنوان API الأساسي
    API_BASE_URL: '/autotestersystem/api',
    
    // إصدار التطبيق
    VERSION: '1.0.0',
    
    // أسماء الصلاحيات
    PERMISSIONS: {
        // صلاحيات الفحص
        INSPECTION_COMPREHENSIVE: 'comprehensive',
        INSPECTION_DYNO: 'dyno',
        INSPECTION_BRAKES: 'brakes',
        INSPECTION_ENGINE: 'engine',
        INSPECTION_ELECTRICAL: 'electrical',
        INSPECTION_COMPUTER: 'computer',
        
        // صلاحيات الإدارة
        MANAGE_INSPECTORS: 'manage_inspectors',
        MANAGE_PERMISSIONS: 'manage_permissions',
        REVIEW_INSPECTIONS: 'review_inspections',
        QUALITY_AUDIT: 'quality_audit',
        VIEW_REPORTS: 'view_reports'
    },
    
    // حالات الطلبات
    REQUEST_STATUS: {
        PENDING: 'pending',
        PENDING_APPROVAL: 'pending_approval',
        ASSIGNED: 'assigned',
        IN_PROGRESS: 'in_progress',
        COMPLETED: 'completed',
        REJECTED: 'rejected',
        APPROVED: 'approved'
    },
    
    // حالات الفاحصين
    INSPECTOR_STATUS: {
        ACTIVE: 'active',
        INACTIVE: 'inactive',
        PENDING: 'pending',
        SUSPENDED: 'suspended'
    },
    
    // أنواع الفحوصات
    INSPECTION_TYPES: {
        comprehensive: { name: 'فحص شامل', icon: 'fa-car', points: 200 },
        dyno: { name: 'فحص داينو', icon: 'fa-tachometer-alt', points: 50 },
        brakes: { name: 'اختبار الفرامل', icon: 'fa-brake-warning', points: 30 },
        engine: { name: 'اختبار المحرك', icon: 'fa-engine', points: 40 },
        electrical: { name: 'اختبار الكهرباء', icon: 'fa-bolt', points: 35 },
        computer: { name: 'اختبار الكمبيوتر', icon: 'fa-laptop-code', points: 45 }
    }
};

// ============================================
// خدمة المصادقة والصلاحيات
// ============================================
const AuthService = {
    // الحصول على المستخدم الحالي
    getCurrentUser() {
        try {
            const user = localStorage.getItem('user') || sessionStorage.getItem('user');
            return user ? JSON.parse(user) : null;
        } catch (e) {
            console.error('Error getting user:', e);
            return null;
        }
    },
    
    // التحقق من تسجيل الدخول
    isAuthenticated() {
        const user = this.getCurrentUser();
        return user && user.token;
    },
    
    // التحقق من صلاحية المشرف
    isSupervisor() {
        const user = this.getCurrentUser();
        return user && (user.role === 'supervisor' || user.role === 'admin');
    },
    
    // التحقق من صلاحية محددة
    hasPermission(permission) {
        const user = this.getCurrentUser();
        if (!user) return false;
        if (user.role === 'admin') return true;
        
        return user.permissions && user.permissions.includes(permission);
    },
    
    // الحصول على التوكن
    getToken() {
        const user = this.getCurrentUser();
        return user ? user.token : null;
    },
    
    // تسجيل الخروج
    logout() {
        localStorage.removeItem('user');
        sessionStorage.removeItem('user');
        window.location.href = '/auth/login.html';
    },
    
    // التحقق من الصلاحية وإعادة التوجيه
    requireAuth(redirectTo = '/auth/login.html') {
        if (!this.isAuthenticated()) {
            window.location.href = redirectTo;
            return false;
        }
        if (!this.isSupervisor()) {
            window.location.href = '/errors/403.html';
            return false;
        }
        return true;
    }
};

// ============================================
// خدمة API الموحدة
// ============================================
const APIService = {
    // إجراء طلب API
    async request(endpoint, options = {}) {
        const url = `${APP_CONFIG.API_BASE_URL}${endpoint}`;
        const token = AuthService.getToken();
        
        const headers = {
            'Content-Type': 'application/json',
            'Accept': 'application/json',
            ...options.headers
        };
        
        if (token) {
            headers['Authorization'] = `Bearer ${token}`;
        }
        
        const config = {
            ...options,
            headers
        };
        
        try {
            const response = await fetch(url, config);
            const data = await response.json();
            
            if (!response.ok) {
                throw new Error(data.message || 'حدث خطأ في الاتصال');
            }
            
            return data;
        } catch (error) {
            console.error('API Error:', error);
            throw error;
        }
    },
    
    // GET request
    async get(endpoint) {
        return this.request(endpoint, { method: 'GET' });
    },
    
    // POST request
    async post(endpoint, body) {
        return this.request(endpoint, {
            method: 'POST',
            body: JSON.stringify(body)
        });
    },
    
    // PUT request
    async put(endpoint, body) {
        return this.request(endpoint, {
            method: 'PUT',
            body: JSON.stringify(body)
        });
    },
    
    // DELETE request
    async delete(endpoint) {
        return this.request(endpoint, { method: 'DELETE' });
    },
    
    // رفع ملف
    async upload(endpoint, formData) {
        const url = `${APP_CONFIG.API_BASE_URL}${endpoint}`;
        const token = AuthService.getToken();
        
        const headers = {};
        if (token) {
            headers['Authorization'] = `Bearer ${token}`;
        }
        
        try {
            const response = await fetch(url, {
                method: 'POST',
                headers,
                body: formData
            });
            
            const data = await response.json();
            
            if (!response.ok) {
                throw new Error(data.message || 'حدث خطأ في رفع الملف');
            }
            
            return data;
        } catch (error) {
            console.error('Upload Error:', error);
            throw error;
        }
    }
};

// ============================================
// خدمة الفاحصين
// ============================================
const InspectorService = {
    // جلب قائمة الفاحصين
    async getList(filters = {}) {
        const params = new URLSearchParams(filters).toString();
        return APIService.get(`/supervisor/inspectors?${params}`);
    },
    
    // جلب تفاصيل فاحص
    async getDetails(id) {
        return APIService.get(`/supervisor/inspectors/${id}`);
    },
    
    // إضافة فاحص جديد
    async add(inspectorData) {
        return APIService.post('/supervisor/inspectors', inspectorData);
    },
    
    // تحديث بيانات فاحص
    async update(id, inspectorData) {
        return APIService.put(`/supervisor/inspectors/${id}`, inspectorData);
    },
    
    // تغيير حالة الفاحص
    async updateStatus(id, status) {
        return APIService.put(`/supervisor/inspectors/${id}/status`, { status });
    },
    
    // جلب صلاحيات الفاحص
    async getPermissions(id) {
        return APIService.get(`/supervisor/inspectors/${id}/permissions`);
    },
    
    // تحديث صلاحيات الفاحص
    async updatePermissions(id, permissions) {
        return APIService.put(`/supervisor/inspectors/${id}/permissions`, { permissions });
    },
    
    // جلب أداء الفاحص
    async getPerformance(id, period = 'month') {
        return APIService.get(`/supervisor/inspectors/${id}/performance?period=${period}`);
    },
    
    // رفع صورة شخصية
    async uploadProfileImage(id, file) {
        const formData = new FormData();
        formData.append('profile_image', file);
        return APIService.upload(`/supervisor/inspectors/${id}/profile-image`, formData);
    }
};

// ============================================
// خدمة الطلبات
// ============================================
const RequestService = {
    // جلب قائمة الطلبات
    async getList(filters = {}) {
        const params = new URLSearchParams(filters).toString();
        return APIService.get(`/supervisor/requests?${params}`);
    },
    
    // جلب تفاصيل طلب
    async getDetails(id) {
        return APIService.get(`/supervisor/requests/${id}`);
    },
    
    // الموافقة على طلب
    async approve(id, notes = '') {
        return APIService.post(`/supervisor/requests/${id}/approve`, { notes });
    },
    
    // رفض طلب
    async reject(id, reason) {
        return APIService.post(`/supervisor/requests/${id}/reject`, { reason });
    },
    
    // تعيين فاحص لطلب
    async assignInspector(id, inspectorId) {
        return APIService.post(`/supervisor/requests/${id}/assign`, { inspector_id: inspectorId });
    },
    
    // جلب إحصائيات الطلبات
    async getStats() {
        return APIService.get('/supervisor/requests/stats');
    }
};

// ============================================
// خدمة مراجعة الفحوصات
// ============================================
const ReviewService = {
    // جلب قائمة الفحوصات للمراجعة
    async getPendingList(filters = {}) {
        const params = new URLSearchParams(filters).toString();
        return APIService.get(`/supervisor/reviews/pending?${params}`);
    },
    
    // جلب تفاصيل فحص للمراجعة
    async getDetails(id) {
        return APIService.get(`/supervisor/reviews/${id}`);
    },
    
    // الموافقة على نتائج الفحص
    async approve(id, notes = '') {
        return APIService.post(`/supervisor/reviews/${id}/approve`, { notes });
    },
    
    // رفض نتائج الفحص
    async reject(id, reason) {
        return APIService.post(`/supervisor/reviews/${id}/reject`, { reason });
    },
    
    // طلب إعادة فحص
    async requestRework(id, reason) {
        return APIService.post(`/supervisor/reviews/${id}/rework`, { reason });
    },
    
    // جلب إحصائيات المراجعات
    async getStats() {
        return APIService.get('/supervisor/reviews/stats');
    }
};

// ============================================
// خدمة الجودة
// ============================================
const QualityService = {
    // جلب تقارير الجودة
    async getReports(filters = {}) {
        const params = new URLSearchParams(filters).toString();
        return APIService.get(`/supervisor/quality/reports?${params}`);
    },
    
    // جلب تفاصيل تدقيق جودة
    async getAuditDetails(id) {
        return APIService.get(`/supervisor/quality/audit/${id}`);
    },
    
    // جلب مؤشرات الجودة
    async getIndicators() {
        return APIService.get('/supervisor/quality/indicators');
    },
    
    // تصدير تقرير الجودة
    async exportReport(format = 'excel', filters = {}) {
        const params = new URLSearchParams({ format, ...filters }).toString();
        return APIService.get(`/supervisor/quality/export?${params}`);
    }
};

// ============================================
// خدمة طلبات الصلاحيات
// ============================================
const PermissionRequestService = {
    // جلب قائمة طلبات الصلاحيات
    async getList(filters = {}) {
        const params = new URLSearchParams(filters).toString();
        return APIService.get(`/supervisor/permission-requests?${params}`);
    },
    
    // الموافقة على طلب صلاحية
    async approve(id, notes = '') {
        return APIService.post(`/supervisor/permission-requests/${id}/approve`, { notes });
    },
    
    // رفض طلب صلاحية
    async reject(id, reason) {
        return APIService.post(`/supervisor/permission-requests/${id}/reject`, { reason });
    },
    
    // جلب إحصائيات الطلبات
    async getStats() {
        return APIService.get('/supervisor/permission-requests/stats');
    }
};

// ============================================
// خدمة التقارير
// ============================================
const ReportService = {
    // جلب تقارير الأداء
    async getPerformanceReports(filters = {}) {
        const params = new URLSearchParams(filters).toString();
        return APIService.get(`/supervisor/reports/performance?${params}`);
    },
    
    // جلب تقرير إحصائي
    async getStatistics(filters = {}) {
        const params = new URLSearchParams(filters).toString();
        return APIService.get(`/supervisor/reports/statistics?${params}`);
    },
    
    // تصدير تقرير
    async export(format = 'excel', type = 'performance', filters = {}) {
        const params = new URLSearchParams({ format, type, ...filters }).toString();
        return APIService.get(`/supervisor/reports/export?${params}`);
    }
};

// ============================================
// خدمة الإشعارات
// ============================================
const NotificationService = {
    // جلب قائمة الإشعارات
    async getList() {
        return APIService.get('/supervisor/notifications');
    },
    
    // تحديث حالة إشعار
    async markAsRead(id) {
        return APIService.put(`/supervisor/notifications/${id}/read`);
    },
    
    // تحديث جميع الإشعارات كمقروءة
    async markAllAsRead() {
        return APIService.put('/supervisor/notifications/read-all');
    },
    
    // حذف إشعار
    async delete(id) {
        return APIService.delete(`/supervisor/notifications/${id}`);
    },
    
    // جلب عدد الإشعارات غير المقروءة
    async getUnreadCount() {
        return APIService.get('/supervisor/notifications/unread-count');
    }
};

// ============================================
// دوال مساعدة
// ============================================
const Utils = {
    // تنسيق التاريخ
    formatDate(date, format = 'ar') {
        const d = new Date(date);
        if (format === 'ar') {
            return d.toLocaleDateString('ar-EG', {
                year: 'numeric',
                month: 'long',
                day: 'numeric'
            });
        }
        return d.toISOString().split('T')[0];
    },
    
    // تنسيق الوقت
    formatTime(date) {
        const d = new Date(date);
        return d.toLocaleTimeString('ar-EG', {
            hour: '2-digit',
            minute: '2-digit'
        });
    },
    
    // تنسيق التاريخ والوقت
    formatDateTime(date) {
        return `${this.formatDate(date)} - ${this.formatTime(date)}`;
    },
    
    // الحصول على لون الحالة
    getStatusColor(status) {
        const colors = {
            pending: '#ffaa00',
            pending_approval: '#ffaa00',
            approved: '#00f3ff',
            completed: '#00ff88',
            rejected: '#ff4444',
            active: '#00ff88',
            inactive: '#ff4444',
            assigned: '#00f3ff',
            in_progress: '#ffaa00'
        };
        return colors[status] || '#aaa';
    },
    
    // الحصول على نص الحالة بالعربية
    getStatusText(status) {
        const texts = {
            pending: 'قيد الانتظار',
            pending_approval: 'بانتظار الموافقة',
            approved: 'موافق',
            completed: 'مكتمل',
            rejected: 'مرفوض',
            active: 'نشط',
            inactive: 'غير نشط',
            assigned: 'مخصص',
            in_progress: 'قيد التنفيذ'
        };
        return texts[status] || status;
    },
    
    // عرض رسالة خطأ
    showError(message, title = 'خطأ') {
        if (typeof Swal !== 'undefined') {
            Swal.fire({
                icon: 'error',
                title: title,
                text: message,
                confirmButtonText: 'حسناً'
            });
        } else {
            alert(message);
        }
    },
    
    // عرض رسالة نجاح
    showSuccess(message, title = 'نجاح') {
        if (typeof Swal !== 'undefined') {
            Swal.fire({
                icon: 'success',
                title: title,
                text: message,
                timer: 2000,
                showConfirmButton: false
            });
        } else {
            alert(message);
        }
    },
    
    // عرض رسالة تأكيد
    async confirm(message, title = 'تأكيد') {
        if (typeof Swal !== 'undefined') {
            const result = await Swal.fire({
                title: title,
                text: message,
                icon: 'question',
                showCancelButton: true,
                confirmButtonText: 'نعم',
                cancelButtonText: 'إلغاء'
            });
            return result.isConfirmed;
        }
        return confirm(message);
    },
    
    // إظهار مؤشر التحميل
    showLoading(containerId, text = 'جاري التحميل...') {
        const container = document.getElementById(containerId);
        if (container) {
            container.innerHTML = `
                <div class="loading">
                    <i class="fas fa-circle-notch fa-spin"></i>
                    <p>${text}</p>
                </div>
            `;
        }
    },
    
    // إخفاء مؤشر التحميل
    hideLoading(containerId, showEmpty = false) {
        const container = document.getElementById(containerId);
        if (container && showEmpty) {
            container.innerHTML = `
                <div class="empty-state">
                    <i class="fas fa-inbox"></i>
                    <h4>لا توجد بيانات</h4>
                    <p>لم يتم العثور على بيانات</p>
                </div>
            `;
        }
    },
    
    // تحويل الأرقام إلى العربية
    toArabicNumber(number) {
        const arabicDigits = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
        return number.toString().replace(/\d/g, d => arabicDigits[d]);
    },
    
    // تحقق من صحة البريد الإلكتروني
    isValidEmail(email) {
        const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
        return re.test(email);
    },
    
    // تحقق من صحة رقم الجوال المصري
    isValidEgyptianPhone(phone) {
        const re = /^01[0-9]{9}$/;
        return re.test(phone);
    }
};

// تصدير الخدمات للاستخدام في الصفحات
if (typeof module !== 'undefined' && module.exports) {
    module.exports = {
        APP_CONFIG,
        AuthService,
        APIService,
        InspectorService,
        RequestService,
        ReviewService,
        QualityService,
        PermissionRequestService,
        ReportService,
        NotificationService,
        Utils
    };
}