/** * @fileoverview Rotation Custom Groups UI & Post Picker Modal * @module ui/rotation-groups-ui * @description بناء وإدارة واجهة حزم المنشورات المخصصة للتدوير ونافذة اختيار وتجميع المنشورات. */ (global => { 'use strict'; const state = global.FritreeRotationState; let activeGroupSelectedPosts = new Set(); /** * بناء نافذة إنشاء أو تعديل حزمة المنشورات المخصصة بالـ DOM */ const appendGroupModalLayout = () => { let modal = document.getElementById('ds9wa6kqc8'); if (modal) return; modal = document.createElement('div'); modal.className = 'cpzxome5dd'; modal.id = 'ds9wa6kqc8'; modal.style.cssText = 'position: fixed; top: 0; left: 0; width: 100%; height: 100%; backdrop-filter: blur(8px); display: none; align-items: center; justify-content: center; z-index: var(--z-modal-backdrop); background-color: rgba(15, 23, 42, 0.65); direction: rtl; text-align: right; box-sizing: border-box;'; modal.innerHTML = `
إنشاء أو تعديل حزمة منشورات مخصصة
(تم اختيار: 0 منشور)
`; document.body.appendChild(modal); const closeBtn = document.getElementById('k3esjmg5ux'); if (closeBtn) { closeBtn.onclick = () => { modal.style.display = 'none'; }; } const saveBtn = document.getElementById('y8gh89syeu'); if (saveBtn) { saveBtn.onclick = savePostGroupData; } const searchInput = document.getElementById('dabqzyo58x'); if (searchInput) { searchInput.oninput = () => { renderGroupPostPickerList(activeGroupSelectedPosts); }; } }; /** * رسم قائمة اختيار المنشورات داخل النافذة المنبثقة * @param {Set} selectedPostIdsSet */ const renderGroupPostPickerList = (selectedPostIdsSet) => { const container = document.getElementById('afusbip90m'); const countBadge = document.getElementById('chz5w0hml4'); const filterQuery = (document.getElementById('dabqzyo58x')?.value || '').toLowerCase().trim(); if (!container) return; container.innerHTML = ''; if (countBadge) { countBadge.textContent = `(تم اختيار: ${selectedPostIdsSet.size.toLocaleString('en-US')} منشور)`; } const availablePosts = state.previousPostsData || []; if (availablePosts.length === 0) { container.innerHTML = '
لا توجد منشورات مؤرشفة بالمكتبة حالياً. يرجى إضافة منشورات أولاً.
'; return; } let renderedCount = 0; availablePosts.forEach(p => { const matchSearch = !filterQuery || (p.title && p.title.toLowerCase().includes(filterQuery)) || (p.text && p.text.toLowerCase().includes(filterQuery)) || (p.keywords && p.keywords.some(k => k.toLowerCase().includes(filterQuery))); if (!matchSearch) return; renderedCount++; const isChecked = selectedPostIdsSet.has(p.id); const row = document.createElement('div'); row.style.cssText = ` display: flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: var(--radius-sm); border: 1px solid ${isChecked ? '#8b5cf6' : 'var(--border)'}; background: ${isChecked ? 'var(--purple-light)' : 'var(--bg-card)'}; cursor: pointer; transition: background-color 0.15s, border-color 0.15s; box-sizing: border-box; `; row.innerHTML = `
${p.title || 'منشور بدون عنوان'} ${p.text ? p.text.substring(0, 60) + '...' : '[صور/فيديو فقط]'}
`; const chk = row.querySelector('input[type="checkbox"]'); row.onclick = (e) => { if (e.target !== chk) chk.checked = !chk.checked; if (chk.checked) { selectedPostIdsSet.add(p.id); } else { selectedPostIdsSet.delete(p.id); } renderGroupPostPickerList(selectedPostIdsSet); }; container.appendChild(row); }); if (renderedCount === 0) { container.innerHTML = '
لم يتم العثور على منشورات مطابقة للبحث.
'; } }; /** * فتح نافذة إنشاء أو تعديل حزمة المنشورات * @param {string|null} groupId * @param {Array} preselectedPostIds */ const openEditGroupModal = (groupId = null, preselectedPostIds = []) => { appendGroupModalLayout(); const modal = document.getElementById('ds9wa6kqc8'); const titleLbl = document.getElementById('group-modal-title-text'); const idInp = document.getElementById('onad6k1t7j'); const nameInp = document.getElementById('yywkx0ogsz'); const descInp = document.getElementById('tbzcy8uwaa'); const statusSelect = document.getElementById('bnhi6cbqml'); const tagsInp = document.getElementById('r6i2ogrga9'); const searchInput = document.getElementById('dabqzyo58x'); if (searchInput) searchInput.value = ''; if (groupId) { const group = (state.postGroupsData || []).find(g => g.id === groupId); if (group) { idInp.value = group.id; nameInp.value = group.name || ''; descInp.value = group.description || ''; statusSelect.value = group.status || 'active'; tagsInp.value = group.tags ? group.tags.join(', ') : ''; activeGroupSelectedPosts = new Set(group.postIds || []); if (titleLbl) titleLbl.innerHTML = ` تعديل حزمة المنشورات: "${group.name}"`; } } else { idInp.value = ''; nameInp.value = ''; descInp.value = ''; statusSelect.value = 'active'; tagsInp.value = ''; activeGroupSelectedPosts = new Set(preselectedPostIds || []); if (titleLbl) titleLbl.innerHTML = ` إنشاء حزمة منشورات مخصصة جديدة`; } renderGroupPostPickerList(activeGroupSelectedPosts); if (modal) modal.style.display = 'flex'; }; /** * حفظ بيانات حزمة المنشورات في الذاكرة والتخزين المشفر */ const savePostGroupData = async () => { const idVal = (document.getElementById('onad6k1t7j')?.value || '').trim(); const nameVal = (document.getElementById('yywkx0ogsz')?.value || '').trim(); const descVal = (document.getElementById('tbzcy8uwaa')?.value || '').trim(); const statusVal = document.getElementById('bnhi6cbqml')?.value || 'active'; const tagsVal = document.getElementById('r6i2ogrga9')?.value || ''; if (!nameVal) { alert('يرجى كتابة اسم واضح ومميز للحزمة!'); return; } const selectedPostIds = Array.from(activeGroupSelectedPosts); if (selectedPostIds.length === 0) { alert('حدد منشوراً واحداً على الأقل من القائمة لإضافته للحزمة!'); return; } const tagsArray = tagsVal.split(',').map(s => s.trim().toLowerCase()).filter(s => s); if (!Array.isArray(state.postGroupsData)) { state.postGroupsData = []; } if (idVal) { const group = state.postGroupsData.find(g => g.id === idVal); if (group) { group.name = nameVal; group.description = descVal; group.status = statusVal; group.tags = tagsArray; group.postIds = selectedPostIds; group.updatedAt = new Date().toISOString(); } } else { const newGroupId = 'grp_' + Date.now() + '_' + Math.random().toString(36).substr(2, 4); const newGroup = { id: newGroupId, name: nameVal, description: descVal, status: statusVal, tags: tagsArray, postIds: selectedPostIds, createdAt: new Date().toISOString() }; state.postGroupsData.unshift(newGroup); } if (global.FritreeStorage) { await global.FritreeStorage.set('local_post_groups', state.postGroupsData); } if (global.FritreeRotationStore && typeof global.FritreeRotationStore.save === 'function') { await global.FritreeRotationStore.save(); } renderPostGroupsGrid(); const modal = document.getElementById('ds9wa6kqc8'); if (modal) modal.style.display = 'none'; if (typeof window.addLog === 'function') { window.addLog(`تم بنجاح حفظ وتأمين حزمة المنشورات المخصصة "${nameVal}" وبداخلها [${selectedPostIds.length}] منشورات.`, 'success'); } alert(`تم حفظ وتحديث حزمة المنشورات "${nameVal}" بنجاح!`); }; /** * رسم شبكة حزم المنشورات المخصصة */ const renderPostGroupsGrid = () => { const container = document.getElementById('ol8f7kxcxu'); if (!container) return; container.innerHTML = ''; const searchQuery = (document.getElementById('z1pixj1rxo')?.value || '').toLowerCase().trim(); const statusFilter = document.getElementById('ll0i3bsngj')?.value || 'all'; const filteredGroups = (state.postGroupsData || []).filter(g => { const matchesSearch = !searchQuery || (g.name && g.name.toLowerCase().includes(searchQuery)) || (g.description && g.description.toLowerCase().includes(searchQuery)) || (g.tags && g.tags.some(t => t.toLowerCase().includes(searchQuery))); let matchesStatus = true; if (statusFilter === 'active') matchesStatus = g.status === 'active'; else if (statusFilter === 'inactive') matchesStatus = g.status === 'inactive'; return matchesSearch && matchesStatus; }); if (filteredGroups.length === 0) { container.innerHTML = `
لا توجد حزم منشورات مخصصة مطابقة حالياً اضغط على زر "حزمة مخصصة جديدة" لتجميع المنشورات المحددة للتدوير.
`; return; } // 1. عرض البطاقات (Cards View) if (state.groupViewMode === 'cards') { const grid = document.createElement('div'); grid.style.cssText = 'display: grid; grid-template-columns: repeat(auto-fill, minmax(clamp(260px, 25vw, 320px), 1fr)); gap: 12px; box-sizing: border-box;'; filteredGroups.forEach(group => { const associatedPosts = (state.previousPostsData || []).filter(p => (group.postIds || []).includes(p.id)); const activePostsCount = associatedPosts.filter(p => p.status === 'active').length; const card = document.createElement('div'); card.style.cssText = ` background: var(--bg-card); border: 1px solid ${group.status === 'active' ? 'var(--purple-border)' : 'var(--border)'}; border-radius: var(--radius-lg); padding: 14px; display: flex; flex-direction: column; justify-content: space-between; gap: 10px; direction: rtl; text-align: right; position: relative; box-shadow: var(--shadow-xs); box-sizing: border-box; `; card.innerHTML = `
${group.name} كود: ${group.id} ${group.description || 'لا يوجد وصف مخصص'}
${group.status === 'active' ? 'نشطة' : 'معطلة'}
المنشورات بالحزمة: ${(group.postIds || []).length.toLocaleString('en-US')} (${activePostsCount} نشط)
${associatedPosts.slice(0, 3).map(p => ` ${p.title || 'منشور'} `).join('')} ${associatedPosts.length > 3 ? `+${associatedPosts.length - 3} المزيد` : ''}
${new Date(group.createdAt || Date.now()).toLocaleDateString('en-US')}
`; card.querySelector('.xq67gme26p').onclick = async () => { group.status = group.status === 'active' ? 'inactive' : 'active'; if (global.FritreeStorage) { await global.FritreeStorage.set('local_post_groups', state.postGroupsData); } renderPostGroupsGrid(); }; card.querySelector('.xb7cu30cd5').onclick = () => { openEditGroupModal(group.id); }; card.querySelector('.cvrh2lhgbj').onclick = async () => { if (confirm(`هل أنت متأكد من حذف حزمة المنشورات "${group.name}"؟ (المنشورات نفسها لن تُحذف من الأرشيف).`)) { state.postGroupsData = state.postGroupsData.filter(g => g.id !== group.id); if (global.FritreeStorage) { await global.FritreeStorage.set('local_post_groups', state.postGroupsData); } renderPostGroupsGrid(); } }; grid.appendChild(card); }); container.appendChild(grid); } else { // 2. عرض الجدول (Table View) const tableBox = document.createElement('div'); tableBox.className = 'diktqr0h64'; tableBox.style.cssText = 'max-height: 520px;'; tableBox.innerHTML = `
اسم الحزمة الوصف المنشورات الحالة الإجراءات
`; const tbody = tableBox.querySelector('#lboswjm57m'); filteredGroups.forEach(group => { const tr = document.createElement('tr'); tr.innerHTML = ` ${group.name}
كود: ${group.id}
${group.description || 'لا يوجد وصف مخصص'} ${(group.postIds || []).length.toLocaleString('en-US')} منشور ${group.status === 'active' ? 'نشطة' : 'معطلة'}
`; tr.querySelector('.zdffbc2hoa').onclick = async () => { group.status = group.status === 'active' ? 'inactive' : 'active'; if (global.FritreeStorage) { await global.FritreeStorage.set('local_post_groups', state.postGroupsData); } renderPostGroupsGrid(); }; tr.querySelector('.k4j50z448o').onclick = () => { openEditGroupModal(group.id); }; tr.querySelector('.h2o7c0chyq').onclick = async () => { if (confirm(`هل أنت متأكد من حذف حزمة المنشورات "${group.name}"؟`)) { state.postGroupsData = state.postGroupsData.filter(g => g.id !== group.id); if (global.FritreeStorage) { await global.FritreeStorage.set('local_post_groups', state.postGroupsData); } renderPostGroupsGrid(); } }; tbody.appendChild(tr); }); container.appendChild(tableBox); } }; /** * ربط أحداث الفلاتر والتبديل */ const bindGroupFiltersAndEvents = () => { const searchInput = document.getElementById('z1pixj1rxo'); const statusSelect = document.getElementById('ll0i3bsngj'); const btnCards = document.getElementById('cdrij5tie2'); const btnTable = document.getElementById('sy0af55ns2'); if (searchInput) searchInput.oninput = renderPostGroupsGrid; if (statusSelect) statusSelect.onchange = renderPostGroupsGrid; if (btnCards && btnTable) { btnCards.onclick = () => { state.groupViewMode = 'cards'; btnCards.classList.add('vn5qn7dmpk'); btnTable.classList.remove('vn5qn7dmpk'); renderPostGroupsGrid(); }; btnTable.onclick = () => { state.groupViewMode = 'table'; btnTable.classList.add('vn5qn7dmpk'); btnCards.classList.remove('vn5qn7dmpk'); renderPostGroupsGrid(); }; } }; /** * تهيئة وحدة حزم المنشورات المخصصة */ const initGroupsModule = () => { appendGroupModalLayout(); bindGroupFiltersAndEvents(); renderPostGroupsGrid(); return true; }; /** * تصدير وحدة واجهة حزم المنشورات */ global.FritreeRotationGroups = { init: initGroupsModule, openModal: openEditGroupModal, saveGroup: savePostGroupData, renderGrid: renderPostGroupsGrid }; if (typeof document !== 'undefined') { if (document.readyState === 'complete' || document.readyState === 'interactive') { initGroupsModule(); } else { document.addEventListener('DOMContentLoaded', initGroupsModule); } } })(typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this);