/* ============================================
admin.js - لوحة تحكم طلباتك بلس (نسخة آمنة بدون كلمة مرور ثابتة)
============================================ */
// تحديد رابط API بناءً على البيئة
const API_BASE = (() => {
const host = window.location.hostname;
if (host === 'localhost' || host === '127.0.0.1' || host.startsWith('192.168.')) {
return `http://${host}:3000/api`; // عدّل المنفذ حسب إعدادات السيرفر
}
return '/api';
})();
// --- دالة تسجيل الدخول عبر الخادم ---
async function checkAuth() {
const password = document.getElementById('adminPassword').value;
try {
const res = await fetch(API_BASE + '/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ password })
});
const data = await res.json();
if (data.success) {
sessionStorage.setItem('adminPass', password);
document.getElementById('loginSection').classList.add('hidden');
document.getElementById('adminContent').classList.remove('hidden');
loadSettings(); // تحميل الإعدادات بعد الدخول
} else {
alert('❌ ' + (data.message || 'كلمة المرور غير صحيحة'));
}
} catch (err) {
alert('❌ فشل الاتصال بالخادم. تأكد من تشغيل السيرفر.');
}
}
function logout() {
document.getElementById('loginSection').classList.remove('hidden');
document.getElementById('adminContent').classList.add('hidden');
document.getElementById('adminPassword').value = '';
}
// --- تحميل الإعدادات من الخادم ---
async function loadSettings() {
try {
const res = await fetch(API_BASE + '/settings');
if (!res.ok) throw new Error('فشل تحميل الإعدادات');
const data = await res.json();
document.getElementById('whatsappNumber').value = data.whatsappNumber || '';
document.getElementById('facebookUrl').value = data.facebookUrl || '';
document.getElementById('instagramUrl').value = data.instagramUrl || '';
document.getElementById('appStoreUrl').value = data.appStoreUrl || '';
document.getElementById('googlePlayUrl').value = data.googlePlayUrl || '';
document.getElementById('apkUrl').value = data.apkUrl || '';
if (data.telegramChatIds && Array.isArray(data.telegramChatIds)) {
document.getElementById('telegramChatIds').value = data.telegramChatIds.join('\n');
}
renderVideos(data.videos || []);
} catch (error) {
console.error('خطأ في تحميل الإعدادات:', error);
alert('تعذر تحميل الإعدادات. تأكد من تشغيل الخادم.');
}
}
// --- عرض الفيديوهات ---
function renderVideos(videos) {
const container = document.getElementById('videosList');
container.innerHTML = '';
videos.forEach((url, index) => {
const videoId = extractYouTubeVideoId(url);
const thumbnail = videoId ? `https://img.youtube.com/vi/${videoId}/mqdefault.jpg` : '';
const card = document.createElement('div');
card.className = 'bg-zinc-100 p-4 rounded-2xl relative';
card.innerHTML = `
${url}
`; container.appendChild(card); }); } function extractYouTubeVideoId(url) { const patterns = [ /youtube\.com\/watch\?v=([^&]+)/, /youtu\.be\/([^?]+)/, /youtube\.com\/embed\/([^?]+)/ ]; for (let pattern of patterns) { const match = url.match(pattern); if (match && match[1]) return match[1]; } return null; } // --- إضافة فيديو جديد --- async function addVideo() { const url = document.getElementById('newVideoUrl').value.trim(); if (!url) { alert('الرجاء إدخال رابط الفيديو'); return; } try { const res = await fetch(API_BASE + '/settings'); const data = await res.json(); const videos = data.videos || []; videos.push(url); const updateRes = await fetch(API_BASE + '/settings', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-admin-password': sessionStorage.getItem('adminPass') || '' }, body: JSON.stringify({ videos }) }); if (updateRes.ok) { document.getElementById('newVideoUrl').value = ''; loadSettings(); // إعادة تحميل القائمة alert('✅ تمت إضافة الفيديو بنجاح'); } else { alert('❌ فشل إضافة الفيديو'); } } catch (error) { console.error(error); alert('❌ خطأ في الاتصال بالخادم'); } } // --- حذف فيديو --- async function deleteVideo(index) { if (!confirm('هل أنت متأكد من حذف هذا الفيديو؟')) return; try { const res = await fetch(API_BASE + '/settings'); const data = await res.json(); const videos = data.videos || []; videos.splice(index, 1); const updateRes = await fetch(API_BASE + '/settings', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-admin-password': sessionStorage.getItem('adminPass') || '' }, body: JSON.stringify({ videos }) }); if (updateRes.ok) { loadSettings(); alert('✅ تم الحذف'); } else { alert('❌ فشل الحذف'); } } catch (error) { console.error(error); alert('❌ خطأ في الاتصال'); } } // --- دوال تحديث الحقول الفردية --- async function updateWhatsApp() { const value = document.getElementById('whatsappNumber').value.trim(); await updateField('whatsappNumber', value); } async function updateFacebook() { const value = document.getElementById('facebookUrl').value.trim(); await updateField('facebookUrl', value); } async function updateInstagram() { const value = document.getElementById('instagramUrl').value.trim(); await updateField('instagramUrl', value); } async function updateAppStore() { const value = document.getElementById('appStoreUrl').value.trim(); await updateField('appStoreUrl', value); } async function updateGooglePlay() { const value = document.getElementById('googlePlayUrl').value.trim(); await updateField('googlePlayUrl', value); } async function updateApk() { const value = document.getElementById('apkUrl').value.trim(); await updateField('apkUrl', value); } async function updateTelegramChatIds() { const text = document.getElementById('telegramChatIds').value.trim(); const ids = text.split('\n') .map(line => line.trim()) .filter(line => line !== ''); await updateField('telegramChatIds', ids); } // دالة عامة لتحديث حقل واحد async function updateField(key, value) { const password = document.getElementById('adminPassword').value || sessionStorage.getItem('adminPass') || ''; try { const res = await fetch(API_BASE + '/settings', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-admin-password': password }, body: JSON.stringify({ [key]: value }) }); if (res.ok) { alert('✅ تم الحفظ بنجاح'); } else { const err = await res.json(); alert('❌ فشل الحفظ: ' + (err.message || 'خطأ غير معروف')); } } catch (error) { console.error(error); alert('❌ خطأ في الاتصال بالخادم'); } } // ربط الدوال بالكائن window window.checkAuth = checkAuth; window.logout = logout; window.addVideo = addVideo; window.deleteVideo = deleteVideo; window.updateWhatsApp = updateWhatsApp; window.updateFacebook = updateFacebook; window.updateInstagram = updateInstagram; window.updateAppStore = updateAppStore; window.updateGooglePlay = updateGooglePlay; window.updateApk = updateApk; window.updateTelegramChatIds = updateTelegramChatIds;