Aller au contenu principal

<!DOCTYPE html>
<html dir="rtl" lang="ar">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>السفر والترفيه والضيافة – مزايا منسوبي UPM</title>
<link href="https://fonts.googleapis.com/css2?family=Cairo:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<script src="https://www.gstatic.com/firebasejs/9.23.0/firebase-app-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/9.23.0/firebase-firestore-compat.js"></script>
<script>
const FIREBASE_CONFIG = {
 apiKey: "AIzaSyCBvuJ907YcP5ybsGn41G_zwnb83N-sbkk",
 authDomain: "upm-mazaya.firebaseapp.com",
 projectId: "upm-mazaya",
 storageBucket: "upm-mazaya.firebasestorage.app",
 messagingSenderId: "271717030243",
 appId: "1:271717030243:web:e9964b0d6e8d24bba5db56"
};
firebase.initializeApp(FIREBASE_CONFIG);
const db = firebase.firestore();
db.settings({ experimentalForceLongPolling: true, merge: true });
</script>
</head>
<body style="background-color:#fafaf8;font-family:'Cairo',Tahoma,sans-serif;margin:0;padding:0;">

<!-- HERO -->
<div style="background-color:#0a3d62;background-image:linear-gradient(135deg,#0a3d62 0%,#1a5276 60%,#16213e 100%);padding:60px 60px 50px;">
 <div style="max-width:1180px;margin:0 auto;">
   <a href="mazaya-complete.html" style="align-items:center;color:rgba(255,255,255,0.6);display:inline-flex;font-size:13px;gap:6px;margin-bottom:24px;text-decoration:none;">&#x2192; العودة للصفحة الرئيسية</a>
   <div style="align-items:center;display:flex;gap:20px;">
     <div style="align-items:center;background-color:rgba(255,255,255,0.12);border-radius:20px;display:flex;font-size:40px;height:72px;justify-content:center;width:72px;">&#x1F3E8;</div>
     <div>
       <div style="color:rgba(201,168,76,0.9);font-size:13px;letter-spacing:1.5px;margin-bottom:6px;"><strong>— شركاء البرنامج</strong></div>
       <h1 style="color:#ffffff;font-size:36px;margin:0 0 6px 0;"><strong>السفر والترفيه والضيافة</strong></h1>
       <p style="color:rgba(255,255,255,0.65);font-size:15px;margin:0;">عروض خاصة على الفنادق والمنتجعات وخدمات السفر والوجهات الترفيهية</p>
     </div>
   </div>
   <div style="align-items:center;background-color:rgba(255,255,255,0.07);border-radius:16px;display:flex;flex-wrap:wrap;gap:32px;margin-top:36px;padding:20px 28px;">
     <div style="text-align:center;"><div id="statCount" style="color:#f0d080;font-size:28px;font-weight:800;">—</div><div style="color:rgba(255,255,255,0.5);font-size:12px;margin-top:2px;">شريك معتمد</div></div>
     <div style="background-color:rgba(255,255,255,0.15);height:40px;width:1px;"></div>
     <div style="text-align:center;"><div id="statRating" style="color:#f0d080;font-size:28px;font-weight:800;">—</div><div style="color:rgba(255,255,255,0.5);font-size:12px;margin-top:2px;">متوسط التقييم</div></div>
     <div style="background-color:rgba(255,255,255,0.15);height:40px;width:1px;"></div>
     <div style="flex:1;"><p style="color:rgba(255,255,255,0.6);font-size:13px;line-height:1.7;margin:0;">يمكن لمنسوبي الجامعة الاستفادة من جميع العروض المدرجة بإبراز ما يثبت انتماءهم للجامعة.</p></div>
   </div>
 </div>
</div>

<!-- GRID -->
<div style="margin:0 auto;max-width:1180px;padding:56px 60px;">
 <div id="loadingState" style="padding:60px 0;text-align:center;"><div style="color:#0a3d62;font-size:15px;">&#x23F3; جارٍ تحميل الشركاء...</div></div>
 <div id="emptyState" style="display:none;padding:80px 0;text-align:center;">
   <div style="font-size:52px;margin-bottom:16px;">&#x1F3E8;</div>
   <h2 style="color:#0a3d62;font-size:22px;margin:0 0 10px 0;">لا يوجد شركاء حتى الآن</h2>
   <p style="color:#7f8c8d;font-size:15px;margin:0 0 28px 0;">سيظهر شركاء السفر والترفيه والضيافة هنا بمجرد اعتمادهم</p>
   <a href="mazaya-complete.html" style="background-color:#c9a84c;border-radius:12px;color:#0a3d62;display:inline-block;font-size:15px;font-weight:700;padding:14px 32px;text-decoration:none;">سجّل منشأتك كشريك &#x2190;</a>
 </div>
 <div id="partnersGrid" style="display:grid;gap:24px;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));"></div>
</div>

<!-- CTA -->
<div style="background-color:#f4f4f0;border-top:1px solid #e8e8e0;padding:60px;">
 <div style="align-items:center;background-color:#0a3d62;background-image:linear-gradient(135deg,#0a3d62 0%,#16213e 100%);border-radius:20px;display:flex;flex-wrap:wrap;gap:32px;justify-content:space-between;margin:0 auto;max-width:1060px;padding:48px 56px;">
   <div>
     <h2 style="color:#ffffff;font-size:22px;margin:0 0 10px 0;"><strong>هل منشأتك في قطاع السفر والترفيه والضيافة؟</strong></h2>
     <p style="color:rgba(255,255,255,0.65);font-size:15px;line-height:1.8;margin:0;">انضم كشريك وقدّم عروضك لآلاف منسوبي جامعة الأمير مقرن.</p>
   </div>
   <a href="mazaya-complete.html" style="background-color:#c9a84c;border-radius:12px;color:#0a3d62;font-size:15px;font-weight:700;padding:14px 32px;text-decoration:none;white-space:nowrap;"><strong>سجّل الآن &#x2190;</strong></a>
 </div>
</div>

<!-- RATING MODAL -->
<div id="ratingModal" onclick="if(event.target===this)closeRating()" style="align-items:center;background-color:rgba(10,61,98,0.6);bottom:0;display:none;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:9999;">
 <div style="background-color:#ffffff;border-radius:20px;max-width:440px;padding:36px 40px;position:relative;text-align:center;width:90%;">
   <button onclick="closeRating()" style="background:rgba(0,0,0,0.07);border:none;border-radius:50%;color:#0a3d62;cursor:pointer;font-size:16px;height:34px;left:14px;position:absolute;top:14px;width:34px;">&#x2715;</button>
   <div id="ratingPartnerName" style="color:#0a3d62;font-size:18px;font-weight:800;margin-bottom:6px;"></div>
   <div style="color:#7f8c8d;font-size:13px;margin-bottom:24px;">كيف تقيّم تجربتك مع هذا الشريك؟</div>
   <div id="starRow" style="display:flex;gap:8px;justify-content:center;margin-bottom:24px;"><button class="star-btn" onclick="selectStar(1)" onmouseover="updateStars(1)" onmouseout="updateStars(selectedStars)" style="background:none;border:none;color:#ddd;cursor:pointer;font-size:36px;padding:4px;transition:all 0.15s;">&#9733;</button><button class="star-btn" onclick="selectStar(2)" onmouseover="updateStars(2)" onmouseout="updateStars(selectedStars)" style="background:none;border:none;color:#ddd;cursor:pointer;font-size:36px;padding:4px;transition:all 0.15s;">&#9733;</button><button class="star-btn" onclick="selectStar(3)" onmouseover="updateStars(3)" onmouseout="updateStars(selectedStars)" style="background:none;border:none;color:#ddd;cursor:pointer;font-size:36px;padding:4px;transition:all 0.15s;">&#9733;</button><button class="star-btn" onclick="selectStar(4)" onmouseover="updateStars(4)" onmouseout="updateStars(selectedStars)" style="background:none;border:none;color:#ddd;cursor:pointer;font-size:36px;padding:4px;transition:all 0.15s;">&#9733;</button><button class="star-btn" onclick="selectStar(5)" onmouseover="updateStars(5)" onmouseout="updateStars(selectedStars)" style="background:none;border:none;color:#ddd;cursor:pointer;font-size:36px;padding:4px;transition:all 0.15s;">&#9733;</button></div>
   <button id="submitRating" onclick="submitRating()" disabled style="background-color:#aaa;border-radius:10px;border:none;color:#fff;cursor:not-allowed;font-family:'Cairo',sans-serif;font-size:15px;font-weight:700;padding:12px 36px;transition:all 0.2s;width:100%;">أرسل التقييم</button>
   <div id="ratingMsg" style="display:none;margin-top:12px;"></div>
 </div>
</div>

<script>
const CATEGORY = "سفر وضيافة";
let currentPartnerId = null;
let selectedStars = 0;
let partners = [];
let ratingPartnerName = '';

async function loadPartners() {
 try {
   const snap = await db.collection('partner_requests')
     .where('status','==','approved')
     .where('offer.category','==', CATEGORY)
     .get();

   const raw = snap.docs.map(d => ({id: d.id, ...d.data()}));

   partners = await Promise.all(raw.map(async p => {
     const rSnap = await db.collection('ratings').where('partnerId','==', p.id).get();
     const stars = rSnap.docs.map(r => r.data().stars);
     p.ratingCount = stars.length;
     p.ratingAvg   = stars.length ? (stars.reduce((a,b)=>a+b,0)/stars.length).toFixed(1) : null;
     return p;
   }));

   document.getElementById('loadingState').style.display = 'none';

   if (partners.length === 0) {
     document.getElementById('emptyState').style.display = 'block';
     return;
   }

   const rated  = partners.filter(p => p.ratingAvg);
   const avgAll = rated.length ? (rated.reduce((s,p)=>s+parseFloat(p.ratingAvg),0)/rated.length).toFixed(1) : '—';
   document.getElementById('statCount').textContent  = partners.length;
   document.getElementById('statRating').textContent = avgAll !== '—' ? avgAll + ' ★' : '—';
   renderPartners();

 } catch(e) {
   console.error(e);
   document.getElementById('loadingState').innerHTML = '<div style="color:#e74c3c;font-size:14px;">&#x274C; خطأ في تحميل البيانات</div>';
 }
}

function renderPartners() {
 const grid = document.getElementById('partnersGrid');
 grid.innerHTML = partners.map(p => {
   const name   = p.businessInfo && p.businessInfo.name ? p.businessInfo.name : 'شريك';
   const desc   = p.offer && p.offer.description ? p.offer.description : '—';
   const city   = p.businessInfo && p.businessInfo.city ? p.businessInfo.city : '';
   const branches = p.offer && p.offer.branches ? p.offer.branches : '';
   const start  = p.offer && p.offer.startDate ? p.offer.startDate : '';
   const end    = p.offer && p.offer.endDate ? p.offer.endDate : '';
   const avg    = p.ratingAvg ? parseFloat(p.ratingAvg) : 0;
   const count  = p.ratingCount || 0;
   const full   = Math.floor(avg);
   const empty  = 5 - full;
   const starsDisp = '<span style="color:#f0b429;">' + '&#9733;'.repeat(full) + '</span><span style="color:#ddd;">' + '&#9733;'.repeat(empty) + '</span>';
   const cityHtml   = city ? '<div style="color:#7f8c8d;font-size:12px;margin-top:2px;">&#x1F4CD; ' + city + '</div>' : '';
   const branchHtml = branches ? '<span style="background-color:#f4f4f0;border-radius:6px;color:#555;font-size:11px;padding:4px 10px;">&#x1F3E2; ' + branches + '</span>' : '';
   const startHtml  = start ? '<span style="background-color:#f4f4f0;border-radius:6px;color:#555;font-size:11px;padding:4px 10px;">&#x1F4C5; من ' + start + '</span>' : '';
   const endHtml    = end ? '<span style="background-color:#f4f4f0;border-radius:6px;color:#555;font-size:11px;padding:4px 10px;">حتى ' + end + '</span>' : '';
   const ratingDisp = avg > 0
     ? '<div style="text-align:center;"><div style="font-size:17px;">' + starsDisp + '</div><div style="color:#aaa;font-size:11px;margin-top:2px;">' + avg + ' / 5 (' + count + ' تقييم)</div></div>'
     : '<div style="background-color:#f8f9fc;border-radius:8px;color:#aaa;font-size:11px;padding:6px 10px;">لا يوجد تقييم بعد</div>';

   return '<div style="background-color:#ffffff;border-radius:18px;border:1px solid #e8e8e0;display:flex;flex-direction:column;overflow:hidden;transition:box-shadow 0.2s;" onmouseover="this.style.boxShadow=\'0 6px 24px rgba(10,61,98,0.1)\'" onmouseout="this.style.boxShadow=\'none\'">'
     + '<div style="background-color:#f4f6fa;border-bottom:1px solid #e8e8e0;padding:22px 24px;">'
     + '<div style="align-items:center;display:flex;gap:14px;justify-content:space-between;">'
     + '<div style="align-items:center;display:flex;gap:12px;">'
     + '<div style="align-items:center;background-color:#fff;border-radius:14px;border:1px solid #e8e8e0;display:flex;font-size:26px;height:52px;justify-content:center;width:52px;">&#x1F3E8;</div>'
     + '<div><div style="color:#0a3d62;font-size:16px;font-weight:800;">' + name + '</div>' + cityHtml + '</div></div>'
     + ratingDisp + '</div></div>'
     + '<div style="flex:1;padding:20px 24px;">'
     + '<div style="background-color:#f0f6ff;border-radius:10px;border-right:3px solid #0a3d62;margin-bottom:16px;padding:12px 16px;">'
     + '<div style="color:#1a5276;font-size:11px;font-weight:700;margin-bottom:4px;">&#x1F381; العرض المقدَّم</div>'
     + '<div style="color:#0a3d62;font-size:14px;line-height:1.8;">' + desc + '</div></div>'
     + '<div style="display:flex;flex-wrap:wrap;gap:8px;">' + branchHtml + startHtml + endHtml + '</div></div>'
     + '<div style="border-top:1px solid #e8e8e0;padding:14px 24px;">'
     + '<button onclick="openRating(\'' + p.id + '\',\'' + name.replace(/'/g,"\\'") + '\')" style="background-color:#0a3d62;border-radius:10px;border:none;color:#fff;cursor:pointer;font-family:\'Cairo\',sans-serif;font-size:13px;font-weight:700;padding:10px;width:100%;">&#9733; قيّم تجربتك</button></div></div>';
 }).join('');
}

function openRating(id, name) {
 currentPartnerId = id; ratingPartnerName = name; selectedStars = 0;
 document.getElementById('ratingPartnerName').textContent = name;
 const btn = document.getElementById('submitRating');
 btn.disabled = true; btn.style.backgroundColor = '#aaa'; btn.style.cursor = 'not-allowed'; btn.textContent = 'أرسل التقييم';
 document.getElementById('ratingMsg').style.display = 'none';
 updateStars(0);
 document.getElementById('ratingModal').style.display = 'flex';
}

function closeRating() {
 document.getElementById('ratingModal').style.display = 'none';
 currentPartnerId = null;
}

function selectStar(n) {
 selectedStars = n; updateStars(n);
 const btn = document.getElementById('submitRating');
 btn.disabled = false; btn.style.backgroundColor = '#c9a84c'; btn.style.color = '#0a3d62'; btn.style.cursor = 'pointer';
}

function updateStars(n) {
 document.querySelectorAll('.star-btn').forEach((s,i) => {
   s.style.color = i < n ? '#f0b429' : '#ddd';
   s.style.transform = i < n ? 'scale(1.2)' : 'scale(1)';
 });
}

async function submitRating() {
 if (!currentPartnerId || !selectedStars) return;
 const btn = document.getElementById('submitRating');
 btn.textContent = '&#x23F3; جارٍ الإرسال...'; btn.disabled = true;
 try {
   await db.collection('ratings').add({
     partnerId: currentPartnerId, partnerName: ratingPartnerName,
     category: CATEGORY, stars: selectedStars,
     createdAt: firebase.firestore.FieldValue.serverTimestamp()
   });
   const msg = document.getElementById('ratingMsg');
   msg.style.display='block'; msg.style.backgroundColor='#d4edda'; msg.style.borderRadius='8px';
   msg.style.color='#155724'; msg.style.fontSize='13px'; msg.style.padding='10px';
   msg.textContent = '&#x2705; شكراً! تم إرسال تقييمك بنجاح';
   btn.textContent = 'تم &#x2713;'; btn.style.backgroundColor = '#2ecc71';
   setTimeout(() => { closeRating(); loadPartners(); }, 1800);
 } catch(e) {
   console.error(e);
   const msg = document.getElementById('ratingMsg');
   msg.style.display='block'; msg.style.backgroundColor='#f8d7da';
   msg.style.color='#721c24'; msg.style.fontSize='13px'; msg.style.padding='10px';
   msg.textContent = '&#x274C; خطأ — حاول مجدداً';
   btn.textContent = 'أرسل التقييم'; btn.disabled = false;
 }
}

loadPartners();
</script>
</body>
</html>