class ReviewSystem { constructor() { this.reviewForm = document.getElementById('review-form'); this.reviewsContainer = document.getElementById('reviews-container'); this.ratingInput = document.getElementById('rating-input'); this.initializeReviews(); } initializeReviews() { // تهيئة نظام التقييم بالنجوم this.initializeStarRating(); // معالجة إرسال المراجعة this.reviewForm?.addEventListener('submit', (e) => this.handleReviewSubmit(e)); // تهيئة فلترة المراجعات this.initializeReviewFilters(); // تحميل المراجعات الحالية this.loadReviews(); } initializeStarRating() { const ratingStars = document.querySelectorAll('.rating-stars i'); ratingStars.forEach((star, index) => { star.addEventListener('mouseover', () => { this.updateStars(ratingStars, index); }); star.addEventListener('click', () => { this.ratingInput.value = index + 1; star.classList.add('selected'); }); }); // إعادة تعيين النجوم عند إزالة المؤشر document.querySelector('.rating-stars')?.addEventListener('mouseleave', () => { this.updateStars(ratingStars, this.ratingInput.value - 1); }); } updateStars(stars, activeIndex) { stars.forEach((star, index) => { star.classList.toggle('active', index <= activeIndex); }); } async handleReviewSubmit(e) { e.preventDefault(); const formData = new FormData(e.target); try { const response = await fetch('/api/reviews.php', { method: 'POST', body: formData }); if (!response.ok) throw new Error('فشل إرسال المراجعة'); const review = await response.json(); this.addReviewToDOM(review); this.showNotification('تم إضافة مراجعتك بنجاح'); e.target.reset(); this.updateStars(document.querySelectorAll('.rating-stars i'), -1); } catch (error) { console.error('Review submission error:', error); this.showNotification('حدث خطأ أثناء إرسال المراجعة', 'error'); } } initializeReviewFilters() { const filterButtons = document.querySelectorAll('.review-filter'); filterButtons.forEach(button => { button.addEventListener('click', () => { filterButtons.forEach(btn => btn.classList.remove('active')); button.classList.add('active'); this.filterReviews(button.dataset.rating); }); }); // تهيئة الترتيب document.getElementById('review-sort')?.addEventListener('change', (e) => { this.sortReviews(e.target.value); }); } async loadReviews() { try { const productId = this.reviewsContainer?.dataset.productId; const response = await fetch(`/api/reviews.php?product_id=${productId}`); if (!response.ok) throw new Error('فشل تحميل المراجعات'); const reviews = await response.json(); this.displayReviews(reviews); } catch (error) { console.error('Reviews loading error:', error); this.showNotification('حدث خطأ أثناء تحميل المراجعات', 'error'); } } displayReviews(reviews) { if (!this.reviewsContainer) return; if (reviews.length === 0) { this.reviewsContainer.innerHTML = '
لا توجد مراجعات بعد
'; return; } this.reviewsContainer.innerHTML = reviews.map(review => `${review.content}
${review.images ? this.generateImageGallery(review.images) : ''}