/* ================= منطق صفحه‌ی اصلی سایت ترم تابستان ================= */
(function () {
  'use strict';
  /* داده‌ها همیشه از Store خوانده می‌شوند؛ بنابراین تغییرات پنل مدیریت با یک رفرش برای کاربر اعمال می‌شود */
  var D = window.Store.load();

  /* ---------- ابزارها ---------- */
  function esc(s){ return String(s==null?'':s).replace(/[&<>"']/g,function(c){return({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'})[c];}); }
  function el(id){ return document.getElementById(id); }
  var FA=['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'];
  function fa(n){ return String(n).replace(/[0-9]/g,function(d){return FA[+d];}); }
  function tgUrl(h){ if(!h) return '#'; var s=String(h).replace(/^@/,''); if(s.indexOf('http')===0) return s; return 'https://t.me/'+s; }

  /* ---------- تم ---------- */
  el('themeToggle').addEventListener('click', function(){
    var cur=document.documentElement.getAttribute('data-theme')||(matchMedia('(prefers-color-scheme: dark)').matches?'dark':'light');
    var next=cur==='dark'?'light':'dark';
    document.documentElement.setAttribute('data-theme',next);
    try{localStorage.setItem(window.Store.THEME_KEY,next);}catch(e){}
  });

  /* ---------- هدر و هیرو ---------- */
  el('siteTitle').textContent=D.site.title;
  el('siteSubtitle').textContent=D.site.subtitle;
  el('heroTitle').textContent=D.site.heroTitle;
  el('heroSub').textContent=D.site.heroSub;

  var totalCourses=(D.courses||[]).reduce(function(a,c){return a+(c.items?c.items.length:0);},0);
  el('heroStats').innerHTML=[
    '<span class="na-stat">کد ترم <b>'+esc(D.site.termCode)+'</b></span>',
    '<span class="na-stat">دروس ارائه‌شده <b>'+fa(totalCourses)+'</b></span>',
    '<span class="na-stat">طول ترم <b>'+fa(6)+' هفته</b></span>',
    '<span class="na-stat">نوع کلاس <b>مجازی</b></span>'
  ].join('');

  /* ---------- زمان‌شمار (پوشش کل تقویم آموزشی + برنامه‌ی هفتگی) ---------- */
  var DAYMAP={'شنبه':6,'یکشنبه':0,'دوشنبه':1,'سه‌شنبه':2,'چهارشنبه':3,'پنجشنبه':4,'جمعه':5};
  function cdBoxes(diff){
    diff=Math.max(0,diff);
    var d=Math.floor(diff/86400000);
    var h=Math.floor(diff%86400000/3600000);
    var m=Math.floor(diff%3600000/60000);
    var s=Math.floor(diff%60000/1000);
    var boxes=[[d,'روز'],[h,'ساعت'],[m,'دقیقه'],[s,'ثانیه']];
    el('cdTimer').innerHTML=boxes.map(function(b){return '<div class="cd-box"><div class="cd-num">'+fa(b[0])+'</div><div class="cd-unit">'+b[1]+'</div></div>';}).join('');
  }
  function slotHours(){
    var hrs=(D.scheduleTimes||[]).map(function(t){return parseInt(String(t).split('-')[0],10);}).filter(function(n){return !isNaN(n);});
    return hrs.length?hrs:[8,10,12,14,16,18];
  }
  function classDays(){
    var ds=(D.scheduleDays||[]).map(function(n){return DAYMAP[n];}).filter(function(n){return n!==undefined;});
    return ds.length?ds:[6,0,1,2,3,4];
  }
  function dayName(g){ for(var k in DAYMAP){ if(DAYMAP[k]===g) return k; } return ''; }
  function nextSession(now){
    var hrs=slotHours(), days=classDays();
    for(var off=0; off<=7; off++){
      var dd=new Date(now.getFullYear(),now.getMonth(),now.getDate()+off);
      if(days.indexOf(dd.getDay())<0) continue;
      for(var i=0;i<hrs.length;i++){
        var cand=new Date(dd.getFullYear(),dd.getMonth(),dd.getDate(),hrs[i],0,0,0);
        if(cand>now) return cand;
      }
    }
    return null;
  }
  function scheduleMode(now){
    var hrs=slotHours(), days=classDays();
    var g=now.getDay(), hr=now.getHours(), curStart=null;
    if(days.indexOf(g)>=0){ for(var i=0;i<hrs.length;i++){ if(hr>=hrs[i] && hr<hrs[i]+2){ curStart=hrs[i]; break; } } }
    if(curStart!=null){
      var endT=new Date(now.getFullYear(),now.getMonth(),now.getDate(),curStart+2,0,0,0);
      el('cdLabel').textContent='🟢 کلاس در حال برگزاری — تا پایان این جلسه';
      el('cdSub').textContent=dayName(g)+' • ساعت '+fa(curStart)+' تا '+fa(curStart+2);
      cdBoxes(endT-now); return;
    }
    var nx=nextSession(now);
    if(!nx){ el('cdLabel').textContent='برنامه‌ی هفتگی کلاس‌ها'; el('cdSub').textContent=''; cdBoxes(0); return; }
    el('cdLabel').textContent='🗓️ تا شروع کلاس بعدی (طبق برنامه‌ی هفتگی)';
    el('cdSub').textContent=dayName(nx.getDay())+' • ساعت '+fa(nx.getHours())+':۰۰';
    cdBoxes(nx-now);
  }
  function normTime(t,fb){ var m=/^(\d{1,2}):(\d{2})$/.exec(String(t||'').trim()); if(!m) return fb; return ('0'+m[1]).slice(-2)+':'+m[2]; }
  function evStart(ev){ return new Date(ev.gStart+'T'+normTime(ev.startTime,'00:00')+':00'); }
  function evEnd(ev){ return new Date(ev.gEnd+'T'+normTime(ev.endTime,'23:59')+':59'); }
  function renderCountdown(){
    var now=new Date();
    var cs=new Date(D.countdown.classStart), ce=new Date(D.countdown.classEnd);
    // در بازه‌ی برگزاری کلاس‌ها: پوشش برنامه‌ی هفتگی
    if(now>=cs && now<=ce){ scheduleMode(now); return; }
    // در غیر این صورت: پوشش کل تقویم آموزشی (ثبت‌نام، انتخاب واحد، پرداخت شهریه و ...)
    var evs=(D.calendar||[]).map(function(e){return {t:e.title,j:e.jalali,st:normTime(e.startTime,''),s:evStart(e),e:evEnd(e)};}).sort(function(a,b){return a.s-b.s;});
    var cur=null;
    for(var i=0;i<evs.length;i++){ if(now<=evs[i].e){ cur=evs[i]; break; } }
    if(!cur){
      el('cdLabel').textContent='تقویم آموزشی ترم تابستان به پایان رسید';
      el('cdTimer').innerHTML='<div class="countdown-done">✅ ترم تابستان به پایان رسیده است</div>';
      el('cdSub').textContent='';
      return;
    }
    var during=now>=cur.s;
    el('cdLabel').textContent=(during?'⏳ تا پایان: ':'⏳ تا شروع: ')+cur.t;
    el('cdSub').textContent=cur.j+(!during&&cur.st?' • شروع از ساعت '+fa(cur.st):'')+(during?' • در حال انجام':' • پیش‌رو');
    cdBoxes((during?cur.e:cur.s)-now);
  }
  renderCountdown();
  setInterval(renderCountdown,1000);

  /* ---------- تایم‌لاین تقویم ---------- */
  (function(){
    var now=new Date();
    el('timeline').innerHTML=(D.calendar||[]).map(function(ev){
      var gs=evStart(ev), ge=evEnd(ev);
      var cls='', badge='', bcls='';
      if(now>ge){ cls='is-done'; badge='انجام شد'; bcls='done'; }
      else if(now>=gs && now<=ge){ cls='is-active'; badge='در جریان'; }
      else { badge='پیش‌رو'; bcls='done'; }
      return '<div class="tl-item '+cls+'"><div class="tl-dot"></div>'+
        '<div class="tl-card"><span class="tl-emoji">'+esc(ev.icon)+'</span>'+
        '<div><div class="tl-title">'+esc(ev.title)+'</div><div class="tl-date">'+esc(ev.jalali)+'</div></div>'+
        '<span class="tl-badge '+bcls+'">'+badge+'</span></div></div>';
    }).join('');
    el('calNote').innerHTML='<span class="co-ic">ℹ️</span><span class="co-tx">'+esc(D.calendarNote)+'</span>';
  })();

  /* ---------- اطلاعیه‌ها ---------- */
  el('announcements-list').innerHTML=(D.announcements||[]).map(function(a,i){
    var link=a.link?'<a class="btn-link" href="'+esc(a.link)+'" target="_blank" rel="noopener">'+esc(a.linkText||'مشاهده')+' ↗</a>':'';
    var afile=a.file?'<a class="btn-link file" href="'+esc(a.file)+'" target="_blank" rel="noopener">'+esc(a.fileText||'📄 دانلود فایل')+'</a>':'';
    var src=a.source?'<span class="acc-source">'+esc(a.source)+'</span>':'';
    return '<div class="acc-item'+(i===0?' open':'')+'"><div class="acc-head">'+
      '<div class="acc-ic">'+esc(a.icon||'📢')+'</div><div class="acc-tt">'+
      (a.badge?'<span class="acc-badge">'+esc(a.badge)+'</span>':'')+
      '<div class="acc-title">'+esc(a.title)+'</div><div class="acc-summary">'+esc(a.summary||'')+'</div></div>'+
      '<svg class="acc-arrow" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>'+
      '<div class="acc-body"><p>'+esc(a.body||'').replace(/\n/g,'<br>')+'</p>'+src+((link||afile)?'<div class="acc-links">'+afile+link+'</div>':'')+'</div></div>';
  }).join('');

  /* ---------- راهنماها ---------- */
  el('guides-list').innerHTML=(D.guides||[]).map(function(g,i){
    var steps=(g.steps||[]).map(function(s){return '<li>'+esc(s)+'</li>';}).join('');
    var link=g.link?'<a class="btn-link" href="'+esc(g.link)+'" target="_blank" rel="noopener">'+esc(g.linkText||'ورود')+' ↗</a>':'';
    var gfile=g.file?'<a class="btn-link file" href="'+esc(g.file)+'" target="_blank" rel="noopener">'+esc(g.fileText||'📄 دانلود فایل')+'</a>':'';
    return '<div class="acc-item'+(i===0?' open':'')+'"><div class="acc-head">'+
      '<div class="acc-ic">'+esc(g.icon||'⚜️')+'</div><div class="acc-tt">'+
      '<div class="acc-title">'+esc(g.title)+'</div><div class="acc-summary">'+esc(g.summary||'')+'</div></div>'+
      '<svg class="acc-arrow" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>'+
      '<div class="acc-body"><ol class="acc-steps">'+steps+'</ol>'+((link||gfile)?'<div class="acc-links">'+gfile+link+'</div>':'')+'</div></div>';
  }).join('');

  /* ---------- نکات مهم ---------- */
  (function(){
    var r=D.importantRules||{};
    el('rulesTitle').textContent=r.title||'نکات مهم';
    el('rulesSub').textContent=r.summary||'';
    var items=(r.items||[]).map(function(x,i){return '<div class="rule-item"><span class="rule-num">'+fa(i+1)+'</span><span class="rule-tx">'+esc(x)+'</span></div>';}).join('');
    el('rules-body').innerHTML='<div class="rules-grid">'+items+'</div>';
  })();

  /* آکوردئون */
  document.addEventListener('click',function(e){
    var head=e.target.closest('.acc-head');
    if(head){ head.parentElement.classList.toggle('open'); }
  });

  /* ---------- مهمان شدن ---------- */
  (function(){
    var g=D.guest||{};
    function ul(arr){ return '<ul class="acc-steps" style="counter-reset:st">'+(arr||[]).map(function(x){return '<li>'+esc(x)+'</li>';}).join('')+'</ul>'; }
    var flow=(g.approval||[]).map(function(s,i){return (i>0?'<span class="arrow">←</span>':'')+'<span class="step">'+esc(s)+'</span>';}).join('');
    var unis=(g.universities||[]).map(function(u){return '<span class="pill">'+esc(u)+'</span>';}).join('');
    el('guest-body').innerHTML=
      '<div class="card"><p style="margin-top:0;line-height:2">'+esc(g.intro||'')+'</p>'+
      '<div class="na-section-title">️۱️⃣ قوانین و شرایط پذیرش</div>'+ul(g.rules)+
      '<div class="callout danger"><span class="co-ic">⚠️</span><span class="co-tx">'+esc(g.langNote||'')+'</span></div>'+
      '<div class="na-section-title">️۲️⃣ نحوه‌ی ثبت درخواست در بهستان</div>'+ul(g.requestSteps)+
      '<div class="na-section-sub" style="margin-top:10px">مسیر تأیید درخواست:</div><div class="flow">'+flow+'</div>'+
      '<div class="callout"><span class="co-ic">📌</span><span class="co-tx">'+esc(g.finalStep||'')+'</span></div>'+
      '<div class="na-section-title">️۳️⃣ نکات بسیار مهم (قبل از انتخاب دانشگاه)</div>'+ul(g.important)+
      '<div class="na-section-title">️۴️⃣ دانشگاه‌های دارای ترم تابستان</div><div class="pill-list">'+unis+'</div>'+
      (g.source?'<span class="acc-source">'+esc(g.source)+'</span>':'')+'</div>';
  })();

  /* ---------- دروس ---------- */
  el('courses-list').innerHTML=(D.courses||[]).map(function(cat){
    var rows=(cat.items||[]).map(function(it){
      return '<div class="course-row"><span class="c-name">'+esc(it.name)+'</span><span class="c-units">'+fa(it.units)+' واحد</span></div>';
    }).join('');
    return '<div class="course-cat"><div class="course-cat-title">📖 '+esc(cat.name)+'<span class="cc-count">'+fa((cat.items||[]).length)+' درس</span></div><div class="course-list">'+rows+'</div></div>';
  }).join('');

  /* ---------- برنامه هفتگی ---------- */
  (function(){
    var days=D.scheduleDays||[], times=D.scheduleTimes||[], sch=D.schedule||{};
    var dayIdx={ 'شنبه':6, 'یکشنبه':0, 'دوشنبه':1, 'سه‌شنبه':2, 'چهارشنبه':3, 'پنجشنبه':4 };
    var startDate=new Date(D.countdown.classStart), endDate=new Date(D.countdown.classEnd);
    var now=new Date(), todayName=null, weekBadge='';
    if(now>=startDate && now<=endDate){
      var wk=Math.floor((now-startDate)/(7*86400000))+1;
      weekBadge='<div class="week-badge">📅 هفته‌ی '+fa(wk)+' از '+fa(6)+' ترم تابستان</div>';
      var jsDay=now.getDay();
      for(var k in dayIdx){ if(dayIdx[k]===jsDay){ todayName=k; } }
    } else if(now<startDate){
      weekBadge='<div class="week-badge">⏳ کلاس‌ها از ۳ مرداد ۱۴۰۵ آغاز می‌شوند</div>';
    }
    var head='<tr><th>روزهای هفته</th>'+times.map(function(t){return '<th>'+fa(t)+'</th>';}).join('')+'</tr>';
    var body=days.map(function(day){
      var isToday=(day===todayName);
      var tds=times.map(function(t){
        var items=(sch[day]&&sch[day][t])||[];
        if(!items.length) return '<td class="empty">—</td>';
        return '<td>'+items.map(function(x){return '<span class="cell-item">'+esc(x)+'</span>';}).join('')+'</td>';
      }).join('');
      return '<tr class="'+(isToday?'today-row':'')+'"><th>'+esc(day)+(isToday?' ⭐':'')+'</th>'+tds+'</tr>';
    }).join('');
    var notes=(D.scheduleNotes||[]).map(function(n){return '<div class="sched-note"><b>◦</b><span>'+esc(n)+'</span></div>';}).join('');
    el('schedule-body').innerHTML=weekBadge+
      '<div class="sched-scroll"><table class="sched-table"><thead>'+head+'</thead><tbody>'+body+'</tbody></table></div>'+notes;
  })();

  /* ---------- شهریه ---------- */
  (function(){
    var f=D.fees||{};
    var head='<tr>'+(f.cols||[]).map(function(c,i){return '<th>'+esc(c)+'</th>';}).join('')+'</tr>';
    var body=(f.rows||[]).map(function(r){
      return '<tr><th>'+esc(r[0])+'</th>'+r.slice(1).map(function(c){return '<td>'+esc(c)+'</td>';}).join('')+'</tr>';
    }).join('');
    el('fees-body').innerHTML='<div class="fees-scroll"><table class="fees-table"><thead>'+head+'</thead><tbody>'+body+'</tbody></table></div>'+
      '<div class="callout info"><span class="co-ic">💳</span><span class="co-tx">'+esc(f.note||'')+'</span></div>';
  })();

  /* ---------- لینک‌ها و تماس ---------- */
  el('links-list').innerHTML=(D.links||[]).map(function(l){
    return '<a class="card link-card" href="'+esc(l.url)+'" target="_blank" rel="noopener"><div class="link-ic">'+esc(l.icon||'🔗')+'</div><div class="link-tt"><div class="link-title">'+esc(l.title)+'</div><div class="link-desc">'+esc(l.desc||'')+'</div><div class="link-url">'+esc(l.url)+'</div></div></a>';
  }).join('');
  if((D.contacts||[]).length){
    el('contacts-list').innerHTML='<div class="na-submit-card"><div class="na-submit-icon">💬</div><div class="na-submit-text"><div class="na-submit-title">راه‌های ارتباطی</div><div class="na-admins">'+
      D.contacts.map(function(c){
        return '<a class="na-admin-chip" href="'+tgUrl(c.handle)+'" target="_blank" rel="noopener"><span class="admin-icon">✈️</span><span class="admin-text"><span class="admin-line-1"><span class="admin-name">'+esc(c.name)+'</span>'+(c.role?'<span class="admin-role">'+esc(c.role)+'</span>':'')+'</span><span class="admin-handle">'+esc(c.handle)+'</span></span></a>';
      }).join('')+'</div></div></div>';
  }

  /* ---------- فوتر ---------- */
  (function(){
    var f=D.footer||{};
    var ch=f.channel?' <span class="footer-sep">•</span> <a class="footer-tg" href="'+tgUrl(f.channel)+'" target="_blank" rel="noopener">'+esc(f.channel)+'</a>':'';
    el('footerText').innerHTML=esc(f.text||'')+ch+' <span class="footer-sep">•</span> '+esc(f.year||'');
  })();

  /* ---------- ناوبری فعال ---------- */
  (function(){
    var links=[].slice.call(document.querySelectorAll('.site-nav a'));
    var secs=links.map(function(a){return document.querySelector(a.getAttribute('href'));});
    function onScroll(){
      var y=window.scrollY+120, active=-1;
      secs.forEach(function(s,i){ if(s && s.offsetTop<=y) active=i; });
      links.forEach(function(a,i){ a.classList.toggle('is-active',i===active); });
    }
    window.addEventListener('scroll',onScroll,{passive:true});
    links.forEach(function(a){ a.addEventListener('click',function(e){
      var t=document.querySelector(a.getAttribute('href'));
      if(t){ e.preventDefault(); window.scrollTo({top:t.offsetTop-64,behavior:'smooth'}); }
    });});
    onScroll();
  })();

})();
