/**
 * نظام إدارة الفحوصات - الدوال المشتركة
 */

// API Base URL
const API_BASE = '/api/inspections';

// ============================================
// دوال عامة
// ============================================

// عرض رسالة
function showMessage(message, type = 'success') {
    const messageDiv = document.getElementById('messageContainer');
    if (messageDiv) {
        messageDiv.innerHTML = `
            <div class="alert alert-${type}">
                ${message}
            </div>
        `;
        
        // إخفاء الرسالة بعد 5 ثوان
        setTimeout(() => {
            messageDiv.innerHTML = '';
        }, 5000);
    }
}

// عرض تحميل
function showLoading(elementId) {
    const element = document.getElementById(elementId);
    if (element) {
        element.innerHTML = `
            <div class="loading">
                <div class="spinner"></div>
                <p>جاري التحميل...</p>
            </div>
        `;
    }
}

// الحصول على حالة الطلب
function getStatusBadge(status) {
    const statusMap = {
        'pending': { class: 'status-pending', text: '⏳ قيد الانتظار' },
        'approved': { class: 'status-approved', text: '✅ تم الموافقة' },
        'completed': { class: 'status-completed', text: '✓ مكتمل' },
        'rejected': { class: 'status-rejected', text: '❌ مرفوض' }
    };
    const s = statusMap[status] || statusMap.pending;
    return `<span class="status-badge ${s.class}">${s.text}</span>`;
}

// الحصول على اسم المركز
function getCenterName(centerId) {
    const centers = {
        1: '🏢 مركز القاهرة الرئيسي',
        2: '🏢 مركز الإسكندرية',
        3: '🏢 مركز الجيزة',
        4: '🏢 مركز بورسعيد'
    };
    return centers[centerId] || '-';
}

// تنقية النص من HTML
function escapeHtml(text) {
    if (!text) return '';
    const div = document.createElement('div');
    div.textContent = text;
    return div.innerHTML;
}

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

// ============================================
// دوال API
// ============================================

// جلب قائمة الفحوصات
async function fetchInspections() {
    try {
        const response = await fetch(`${API_BASE}/list.php`);
        const result = await response.json();
        
        if (result.success) {
            return result.data;
        } else {
            throw new Error(result.message);
        }
    } catch (error) {
        console.error('Error fetching inspections:', error);
        showMessage('خطأ في تحميل البيانات: ' + error.message, 'error');
        return [];
    }
}

// إنشاء فحص جديد
async function createInspection(data) {
    try {
        const response = await fetch(`${API_BASE}/create.php`, {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify(data)
        });
        
        const result = await response.json();
        
        if (result.success) {
            showMessage('✅ تم إضافة الفحص بنجاح', 'success');
            return result;
        } else {
            throw new Error(result.message);
        }
    } catch (error) {
        console.error('Error creating inspection:', error);
        showMessage('❌ خطأ: ' + error.message, 'error');
        return null;
    }
}

// جلب تفاصيل فحص
async function getInspection(id) {
    try {
        const response = await fetch(`${API_BASE}/get.php?id=${id}`);
        const result = await response.json();
        
        if (result.success) {
            return result.data;
        } else {
            throw new Error(result.message);
        }
    } catch (error) {
        console.error('Error getting inspection:', error);
        showMessage('خطأ في تحميل التفاصيل: ' + error.message, 'error');
        return null;
    }
}

// تحديث فحص
async function updateInspection(id, data) {
    try {
        const response = await fetch(`${API_BASE}/update.php`, {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ id, ...data })
        });
        
        const result = await response.json();
        
        if (result.success) {
            showMessage('✅ تم تحديث الفحص بنجاح', 'success');
            return result;
        } else {
            throw new Error(result.message);
        }
    } catch (error) {
        console.error('Error updating inspection:', error);
        showMessage('❌ خطأ: ' + error.message, 'error');
        return null;
    }
}

// تحديث حالة الفحص
async function updateInspectionStatus(id, status) {
    try {
        const response = await fetch(`${API_BASE}/update_status.php`, {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ id, status })
        });
        
        const result = await response.json();
        
        if (result.success) {
            showMessage('✅ تم تحديث الحالة بنجاح', 'success');
            return result;
        } else {
            throw new Error(result.message);
        }
    } catch (error) {
        console.error('Error updating status:', error);
        showMessage('❌ خطأ: ' + error.message, 'error');
        return null;
    }
}

// حذف فحص
async function deleteInspection(id) {
    if (!confirm('⚠️ هل أنت متأكد من حذف هذا الفحص؟ لا يمكن التراجع عن هذا الإجراء.')) {
        return false;
    }
    
    try {
        const response = await fetch(`${API_BASE}/delete.php`, {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ id })
        });
        
        const result = await response.json();
        
        if (result.success) {
            showMessage('✅ تم حذف الفحص بنجاح', 'success');
            return true;
        } else {
            throw new Error(result.message);
        }
    } catch (error) {
        console.error('Error deleting inspection:', error);
        showMessage('❌ خطأ: ' + error.message, 'error');
        return false;
    }
}

// ============================================
// دوال عرض الجدول والفلترة
// ============================================

// عرض الجدول
function renderTable(requests, tbodyId = 'tableBody') {
    const tbody = document.getElementById(tbodyId);
    
    if (!tbody) return;
    
    if (!requests || requests.length === 0) {
        tbody.innerHTML = `
            <tr>
                <td colspan="8" class="empty-state">
                    <i>📭</i>
                    <p>لا توجد طلبات فحص</p>
                </td>
            </tr>
        `;
        return;
    }
    
    tbody.innerHTML = requests.map(req => `
        <tr>
            <td>${escapeHtml(req.request_number || req.id)}</td>
            <td>${escapeHtml(req.customer_name)}</td>
            <td>${req.customer_phone || '-'}</td>
            <td>${req.vehicle_type || '-'}</td>
            <td>${req.inspection_type || '-'}</td>
            <td>${req.appointment_date || '-'}</td>
            <td>${getStatusBadge(req.status)}</td>
            <td>
                <a href="view.html?id=${req.id}" class="btn btn-info btn-sm">👁️ عرض</a>
                <a href="edit.html?id=${req.id}" class="btn btn-warning btn-sm">✏️ تعديل</a>
                <button onclick="handleDelete(${req.id})" class="btn btn-danger btn-sm">🗑️ حذف</button>
            </td>
        </tr>
    `).join('');
}

// فلترة الجدول
function filterTable(requests, searchTerm, statusFilter) {
    let filtered = [...requests];
    
    if (searchTerm) {
        const term = searchTerm.toLowerCase();
        filtered = filtered.filter(req => 
            req.customer_name.toLowerCase().includes(term) ||
            (req.customer_phone && req.customer_phone.includes(term)) ||
            (req.request_number && req.request_number.toLowerCase().includes(term))
        );
    }
    
    if (statusFilter && statusFilter !== 'all') {
        filtered = filtered.filter(req => req.status === statusFilter);
    }
    
    return filtered;
}

// تحديث الإحصائيات
function updateStats(requests) {
    const stats = {
        total: requests.length,
        pending: requests.filter(r => r.status === 'pending').length,
        approved: requests.filter(r => r.status === 'approved').length,
        completed: requests.filter(r => r.status === 'completed').length,
        rejected: requests.filter(r => r.status === 'rejected').length
    };
    
    const totalEl = document.getElementById('totalRequests');
    const pendingEl = document.getElementById('pendingRequests');
    const approvedEl = document.getElementById('approvedRequests');
    const completedEl = document.getElementById('completedRequests');
    
    if (totalEl) totalEl.innerText = stats.total;
    if (pendingEl) pendingEl.innerText = stats.pending;
    if (approvedEl) approvedEl.innerText = stats.approved;
    if (completedEl) completedEl.innerText = stats.completed;
}

// ============================================
// دوال التعامل مع الفورم
// ============================================

// جمع بيانات الفورم
function collectFormData() {
    return {
        customer_name: document.getElementById('customer_name')?.value,
        customer_phone: document.getElementById('customer_phone')?.value,
        customer_email: document.getElementById('customer_email')?.value,
        vehicle_type: document.getElementById('vehicle_type')?.value,
        vehicle_model: document.getElementById('vehicle_model')?.value,
        vehicle_year: document.getElementById('vehicle_year')?.value,
        plate_number: document.getElementById('plate_number')?.value,
        inspection_type: document.getElementById('inspection_type')?.value,
        center_id: document.getElementById('center_id')?.value,
        appointment_date: document.getElementById('appointment_date')?.value,
        appointment_time: document.getElementById('appointment_time')?.value,
        notes: document.getElementById('notes')?.value
    };
}

// ملء الفورم بالبيانات
function populateForm(data) {
    const fields = ['customer_name', 'customer_phone', 'customer_email', 'vehicle_type', 
                    'vehicle_model', 'vehicle_year', 'plate_number', 'inspection_type', 
                    'center_id', 'appointment_date', 'appointment_time', 'notes'];
    
    fields.forEach(field => {
        const el = document.getElementById(field);
        if (el && data[field]) {
            el.value = data[field];
        }
    });
}

// التحقق من صحة رقم الجوال المصري
function validateEgyptianPhone(phone) {
    const pattern = /^(\+20|0020|0)?(10|11|12|15)[0-9]{8}$/;
    return pattern.test(phone);
}

// ============================================
// دوال عرض التفاصيل
// ============================================

// عرض تفاصيل الفحص في مودال
function showDetailsModal(inspection) {
    const modal = document.getElementById('detailsModal');
    const content = document.getElementById('modalContent');
    
    if (!modal || !content) return;
    
    content.innerHTML = `
        <div class="info-row">
            <div class="info-label">رقم الطلب:</div>
            <div class="info-value">${escapeHtml(inspection.request_number || inspection.id)}</div>
        </div>
        <div class="info-row">
            <div class="info-label">اسم العميل:</div>
            <div class="info-value">${escapeHtml(inspection.customer_name)}</div>
        </div>
        <div class="info-row">
            <div class="info-label">رقم الجوال:</div>
            <div class="info-value">${inspection.customer_phone || '-'}</div>
        </div>
        <div class="info-row">
            <div class="info-label">البريد الإلكتروني:</div>
            <div class="info-value">${inspection.customer_email || '-'}</div>
        </div>
        <div class="info-row">
            <div class="info-label">نوع المركبة:</div>
            <div class="info-value">${inspection.vehicle_type || '-'}</div>
        </div>
        <div class="info-row">
            <div class="info-label">موديل المركبة:</div>
            <div class="info-value">${inspection.vehicle_model || '-'}</div>
        </div>
        <div class="info-row">
            <div class="info-label">رقم اللوحة:</div>
            <div class="info-value">${inspection.plate_number || '-'}</div>
        </div>
        <div class="info-row">
            <div class="info-label">نوع الفحص:</div>
            <div class="info-value">${inspection.inspection_type || '-'}</div>
        </div>
        <div class="info-row">
            <div class="info-label">تاريخ الموعد:</div>
            <div class="info-value">${inspection.appointment_date || '-'}</div>
        </div>
        <div class="info-row">
            <div class="info-label">وقت الموعد:</div>
            <div class="info-value">${inspection.appointment_time || '-'}</div>
        </div>
        <div class="info-row">
            <div class="info-label">مركز الفحص:</div>
            <div class="info-value">${getCenterName(inspection.center_id)}</div>
        </div>
        <div class="info-row">
            <div class="info-label">الحالة:</div>
            <div class="info-value">${getStatusBadge(inspection.status)}</div>
        </div>
        <div class="info-row">
            <div class="info-label">ملاحظات:</div>
            <div class="info-value">${inspection.notes || '-'}</div>
        </div>
        <div class="info-row">
            <div class="info-label">تاريخ الإنشاء:</div>
            <div class="info-value">${inspection.created_at || '-'}</div>
        </div>
    `;
    
    modal.style.display = 'flex';
}

// إغلاق المودال
function closeModal() {
    const modal = document.getElementById('detailsModal');
    if (modal) {
        modal.style.display = 'none';
    }
}

// ============================================
// تسجيل الخروج
// ============================================
function logout() {
    if (confirm('هل أنت متأكد من تسجيل الخروج؟')) {
        localStorage.removeItem('user');
        window.location.href = '/login.html';
    }
}

// ============================================
// تهيئة الصفحة
// ============================================
document.addEventListener('DOMContentLoaded', () => {
    // إغلاق المودال عند النقر خارجها
    window.onclick = function(event) {
        const modal = document.getElementById('detailsModal');
        if (event.target === modal) {
            closeModal();
        }
    };
});