/* =========================================================================
   داده‌های پیش‌فرض سایت ترم تابستان دانشگاه شاهد (۴۰۴۳ - ۱۴۰۵)
   همه‌ی این بخش‌ها از «پنل مدیریت» (/adminpannel) قابل ویرایش‌اند و در
   localStorage ذخیره می‌شوند؛ بنابراین بدون نیاز به سرور هم ماندگارند.
   ========================================================================= */
(function () {
  'use strict';

  var DEFAULT = window.SITE_DATA || {
    site: {
      title: 'ترم تابستان دانشگاه شاهد',
      subtitle: 'نیمسال تابستان ۱۴۰۵ (۴۰۴۳) — اطلاعیه‌ها و راهنمای ثبت‌نام',
      heroTitle: '☀️ ترم تابستان ۱۴۰۵ دانشگاه شاهد',
      heroSub: 'اطلاعیه‌های کلی، تقویم آموزشی، دروس ارائه‌شده و راهنمای کامل ثبت‌نام و مهمان شدن در یک‌جا.',
      termCode: '۴۰۴۳'
    },

    /* زمان‌شمار و مبنای تولید برنامه هفتگی */
    countdown: {
      /* شروع کلاس‌ها: ۳ مرداد ۱۴۰۵ = 2026-07-25 */
      classStart: '2026-07-25T08:00:00',
      classEnd: '2026-09-03T20:00:00',
      label: 'تا شروع کلاس‌های ترم تابستان'
    },

    /* تقویم آموزشی — هر رویداد تاریخ شمسی و معادل میلادی برای زمان‌شمار دارد */
    calendar: [
      { id: 'reg',   icon: '📝', title: 'ثبت‌نام، انتخاب واحد و پرداخت شهریه', jalali: '۱۶ تیر تا ۳۰ تیر ۱۴۰۵', gStart: '2026-07-07', gEnd: '2026-07-21' },
      { id: 'class', icon: '🎓', title: 'شروع و پایان کلاس‌ها', jalali: '۳ مرداد تا ۱۲ شهریور ۱۴۰۵', gStart: '2026-07-25', gEnd: '2026-09-03' },
      { id: 'drop',  icon: '⚠️', title: 'حذف اضطراری', jalali: '۱۰ تا ۱۱ شهریور ۱۴۰۵', gStart: '2026-09-01', gEnd: '2026-09-02' },
      { id: 'exam',  icon: '🖊️', title: 'امتحانات پایان‌ترم', jalali: '۱۴ تا ۱۸ شهریور ۱۴۰۵', gStart: '2026-09-05', gEnd: '2026-09-09' }
    ],
    calendarNote: 'کلاس‌ها از شنبه تا پنجشنبه و به‌صورت مجازی برگزار می‌شوند. طول ترم ۶ هفته است.',

    /* نکات مهم و قوانین ترم تابستان */
    importantRules: {
      icon: '📌',
      title: 'نکات مهم و قوانین ترم تابستان',
      summary: 'قوانین کلیدی که پیش از انتخاب واحد باید بدانید',
      items: [
        'حداکثر تعداد واحد قابل اخذ در ترم تابستان ۶ واحد است (برای برخی دانشجویان واجد شرایط امکان اخذ تا ۸ واحد وجود دارد).',
        'اخذ بیش از ۲ واحد دروس معارف مجاز نیست.',
        'تغییر گروه درسی امکان‌پذیر نیست.',
        'در صورت حذف اضطراری یا انصراف، شهریه مسترد نخواهد شد.'
      ]
    },

    /* اطلاعیه‌ها */
    announcements: [
      {
        id: 'main', icon: '📢', badge: 'اطلاعیه اصلی',
        title: 'اطلاعیه کلی ترم تابستان (۴۰۴۳ - ۱۴۰۵)',
        summary: 'اطلاعیه کامل شامل تقویم آموزشی، دروس ارائه‌شده، قوانین و راهنمای ثبت‌نام. این اطلاعیه مبنای اصلی برگزاری ترم تابستان است.',
        body: 'ترم تابستان نیمسال ۴۰۴۳ (تابستان ۱۴۰۵) به‌صورت مجازی برگزار می‌شود. ثبت‌نام و انتخاب واحد از ۱۶ تیرماه آغاز می‌شود. جزئیات تقویم آموزشی، فهرست دروس ارائه‌شده، جدول شهریه و قوانین اخذ واحد در بخش‌های همین صفحه آمده است. دانشجویان موظف‌اند پیش از انتخاب واحد، همه‌ی اطلاعیه‌ها و راهنماها را مطالعه کنند.',
        file: 'assets/files/اطلاعیه-اصلی-ترم-تابستان-4043.pdf', fileText: '📄 دانلود فایل کامل اطلاعیه اصلی (PDF)',
        link: '', linkText: 'مشاهده در کانال', source: '@Omor_Shahed'
      },
      {
        id: 'supp', icon: '💠', badge: 'اطلاعیه تکمیلی',
        title: 'اطلاعیه تکمیلی ترم تابستان (۴۰۴۳)',
        summary: 'توضیحات تکمیلی درباره‌ی دروس پایه و اصلی، نحوه‌ی پرداخت شهریه و دروس عمومی.',
        body: '🔘 در مورد دروس پایه و اصلی:\n«از آنجا که اخذ واحدهای دروس پایه و اصلیِ ارائه‌شده، توسط دانشجویان دانشگاه شاهد بایستی با مجوز گروه آموزشی و دانشکده‌ی مربوطه انجام گیرد، لذا برای اخذ این دروس در ترم تابستان، شرط تأیید معاون آموزشی دانشکده برای اخذ واحد گنجانده خواهد شد.»\nبنابراین هر دانشکده‌ای برای اخذ دروس پایه و اصلی قانون خودش را دارد و باید از معاون آموزشی دانشکده‌ی مربوطه سؤال شود.\n⭕ نکته: اخذ دروسی که در دانشگاه ارائه می‌شود، در دانشگاه‌های دیگر برای دانشجویان دانشگاه شاهد ممنوع است.\n\n🔘 در مورد شهریه و نحوه‌ی پرداخت:\nشهریه‌ی ثابت (برای دانشجویان و. علوم) کلاً یک‌بار و بلافاصله بعد از ثبت‌نام در ترم تابستان باید پرداخت شود. چنانچه دانشجو ۱ واحد و یا حداکثر واحدهای تعیین‌شده (۶ یا ۸) را اخذ کند، مشمول پرداخت شهریه‌ی ثابت + متغیر می‌شود.\nکل شهریه همان ابتدا پس از انتخاب واحد (و پس از تأیید معاون دانشکده برای دانشجویان دانشگاه شاهد) در سامانه‌ی بهستان باید پرداخت شود تا انتخاب واحد نهایی شود. درس سوانح مانند سایر دروس، شهریه دارد.\n\n🔘 در مورد دروس عمومی:\nاخذ دروس عمومیِ دارای ترتیب مربوط به ترم‌های بعد و همچنین «دانش خانواده» در ترم تابستان مشکلی ندارد.\nورودی‌های ۴۰۴ می‌توانند درس سوانح را اخذ کنند.',
        link: '', linkText: 'مشاهده در کانال', source: '@Omor_Shahed'
      }
    ],

    /* راهنماهای ثبت‌نام */
    guides: [
      {
        id: 'g-shahed', icon: '▫️', color: 'a1',
        title: 'راهنمای ثبت‌نام ترم تابستان (دانشجویان شاهد)',
        summary: 'انتخاب واحد دانشجویان شاهدی از طریق سامانه‌ی بهستان انجام می‌شود.',
        steps: [
          'وارد سامانه‌ی بهستان به نشانی eduportal.shahed.ac.ir شوید.',
          'راهنمای «آموزش انتخاب واحد ترم تابستان» را مطالعه کنید (برای همه‌ی دانشجویان شاهدی و غیرشاهدی الزامی است).',
          'برای اخذ دروس پایه و اصلی، ابتدا تأیید معاون آموزشی دانشکده را دریافت کنید.',
          'پس از انتخاب واحد، کل شهریه را در سامانه‌ی بهستان پرداخت کنید تا انتخاب واحد نهایی شود.'
        ],
        link: 'https://eduportal.shahed.ac.ir/', linkText: 'ورود به سامانه بهستان'
      },
      {
        id: 'g-nonshahed', icon: '▫️', color: 'a2',
        title: 'راهنمای ثبت‌نام دانشجویان غیرشاهدی',
        summary: 'دانشجویان غیرشاهدی ابتدا باید در سامانه ثبت‌نام غیرشاهدی نام‌نویسی کنند و سپس راهنمای انتخاب واحد بهستان را نیز مطالعه نمایند. (هر دو فایل الزامی است.)',
        steps: [
          'ابتدا راهنمای «ثبت‌نام متقاضیان نیمسال تابستانی ۱۴۰۵» را مطالعه کنید.',
          'وارد سامانه‌ی ثبت‌نام غیرشاهدی به نشانی sabt.shahed.ac.ir شوید و ثبت‌نام کنید.',
          'سپس راهنمای «آموزش انتخاب واحد در بهستان» را نیز مطالعه و طبق آن انتخاب واحد کنید.'
        ],
        file: 'assets/files/راهنمای-ثبت-نام-غیرشاهدی.pdf', fileText: '📄 دانلود راهنمای ثبت‌نام غیرشاهدی (PDF)',
        link: 'https://sabt.shahed.ac.ir', linkText: 'سامانه ثبت‌نام غیرشاهدی'
      },
      {
        id: 'g-behestan', icon: '🖥️', color: 'a3',
        title: 'آموزش انتخاب واحد در بهستان',
        summary: 'این راهنما را هم دانشجویان شاهدی و هم غیرشاهدی باید مطالعه کنند.',
        steps: [
          'وارد سامانه‌ی بهستان (eduportal.shahed.ac.ir) شوید.',
          'ترم «تابستان ۰۴-۰۵» (۴۰۴۳) را انتخاب کنید.',
          'دروس مورد نظر را مطابق چارت درسی خود اخذ کنید.',
          'شهریه را پرداخت کنید تا انتخاب واحد نهایی و ثبت شود.'
        ],
        file: 'assets/files/اموزش-انتخاب-واحد-بهستان.pdf', fileText: '📄 دانلود آموزش انتخاب واحد در بهستان (PDF)',
        link: 'https://eduportal.shahed.ac.ir/', linkText: 'ورود به بهستان'
      }
    ],

    /* راهنمای کامل مهمان شدن */
    guest: {
      icon: '🧳',
      title: 'راهنمای کامل مهمان شدن در ترم تابستان',
      intro: 'اگر دانشجوی شاهد قصد مهمان شدن در دانشگاه دیگری را دارد، آن درس نباید در دانشگاه شاهد ارائه شده باشد و باید با تأیید مدیر گروه و مورد تأیید بودن دانشگاه مقصد توسط دانشگاه شاهد، مراحل زیر طی شود.',
      rules: [
        'سقف واحد: حداکثر ۶ واحد.',
        'شرط دروس پایه (ریاضی و فیزیک): حتماً باید یک‌بار در آن درس افتاده باشید.',
        'سایر دروس عمومی: بدون شرط و محدودیت.',
        'دروس عملی: پیش از اقدام، وضعیت این دروس را از آموزش یا مدیر گروه استعلام کنید.',
        'هزینه‌ها: شهریه‌ی ثابت و متغیر (طبق تعداد واحد و نوع درس) محاسبه می‌شود.'
      ],
      langNote: 'نکته حیاتی (دروس زبان): چون درس زبان عمومی در ترم آینده ارائه نخواهد شد، به دانشجویانی که نیاز به گذراندن این درس دارند—به‌خصوص ورودی ۴۰۲ رشته‌ی مددکاری—توصیه می‌شود هرچه سریع‌تر برای مهمان شدن در سایر دانشگاه‌ها اقدام کنند.',
      requestSteps: [
        'انتخاب گزینه: در بهستان وارد بخش «درخواست» شوید و «ثبت درخواست مهمانی» را انتخاب کنید (در سیستم: «ثبت درخواست مهمان تک‌درس به دانشگاه دیگر»).',
        'انتخاب ترم: ترم را «تابستان ۰۴-۰۵» (یا ۴۰۴۳) انتخاب کنید.',
        'جزئیات: دانشگاه مقصد و تعداد واحد مورد نیاز را وارد کنید.',
        'نوع مهمانی: برای یک درس «تک‌درس» و برای بیش از یک درس «مهمان برای یک ترم».'
      ],
      approval: ['ثبت در بهستان', 'کارشناس آموزش', 'مدیر گروه', 'معاون آموزش', 'آموزش کل'],
      finalStep: 'گام نهایی: پس از تأیید تمامی مراحل در سیستم، حتماً برای دریافت نامه‌ی رسمی به آموزش کل مراجعه کنید.',
      important: [
        'اعتبار دانشگاه: مطمئن شوید دانشگاه مقصد مورد تأیید دانشگاه شاهد است و اعتبار لازم را دارد.',
        'مطابقت دروس: دقیقاً همان درسی را بردارید که در چارت شماست (مثلاً اگر در چارت «مبانی فیزیک ۲» است، «فیزیک ۲» را نگیرید؛ پذیرفته نمی‌شود).',
        'یافتن دانشگاه: برای پی��ا کردن دروس ارائه‌شده، سایت دانشگاه‌های دارای ترم تابستان را بررسی کنید.'
      ],
      universities: ['صنعتی خواجه نصیرالدین طوسی', 'شیراز', 'ارومیه', 'گیلان', 'صنعتی کرمانشاه', 'بیرجند', 'قوچان', 'کاشان', 'فرهنگیان'],
      source: '@Omor_Shahed'
    },

    /* دروس ارائه‌شده */
    courses: [
      { id: 'c-omoumi', name: 'دروس عمومی', items: [
        { name: 'فارسی عمومی (وزارت علوم)', units: '۳' },
        { name: 'فارسی عمومی (وزارت بهداشت)', units: '۲' },
        { name: 'زبان خارجی (وزارت علوم)', units: '۳' },
        { name: 'زبان عمومی (وزارت بهداشت)', units: '۲' },
        { name: 'تاریخ امامت', units: '۲' },
        { name: 'تفسیر موضوعی نهج‌البلاغه (تفسیر موضوعی قرآن)', units: '۲' },
        { name: 'انقلاب اسلامی ایران', units: '۲' },
        { name: 'دانش خانواده و جمعیت', units: '۲' },
        { name: 'آمادگی در برابر حوادث و سوانح (خودخوان)', units: '۱' },
        { name: 'مهارت‌های زندگی دانشجویی', units: '۲' },
        { name: 'آشنایی با فرهنگ و ارزش‌های دفاع مقدس (علوم و معارف دفاع مقدس و مقاومت)', units: '۲' },
        { name: 'تربیت بدنی', units: '۱' }
      ]},
      { id: 'c-paye-fani', name: 'دروس پایه (فنی‌مهندسی و علوم‌پایه)', items: [
        { name: 'فیزیک ۱', units: '۳' },
        { name: 'فیزیک ۲', units: '۳' },
        { name: 'ریاضی ۱', units: '۳' },
        { name: 'ریاضی ۲', units: '۳' },
        { name: 'معادلات دیفرانسیل', units: '۳' },
        { name: 'شیمی عمومی', units: '۳' },
        { name: 'برنامه‌نویسی کامپیوتر', units: '۳' },
        { name: 'آمار و احتمال مهندسی', units: '۳' },
        { name: 'محاسبات عددی', units: '۳' }
      ]},
      { id: 'c-paye-pezeshki', name: 'دروس پایه (علوم پزشکی)', items: [
        { name: 'انگل شناسی (نظری)', units: '۱.۶۵' },
        { name: 'قارچ‌شناسی', units: '۱' },
        { name: 'پاتولوژی بیماری های محیطی، تغذیه ای و عفونی', units: '۰.۴' },
        { name: 'پاتولوژی اختلالات ژنتیک و بیماری های دوره کودکی', units: '۰.۵' },
        { name: 'ایمنی شناسی پزشکی', units: '۱.۷۶' }
      ]},
      { id: 'c-paye-ensani', name: 'دروس پایه (علوم انسانی و حکمرانی)', items: [
        { name: 'ریاضیات پایه', units: '۲' },
        { name: 'ریاضیات و کاربرد آن در مدیریت', units: '۳' },
        { name: 'آمار ۱', units: '۳' },
        { name: 'آمار ۲', units: '۳' },
        { name: 'تحقیق در عملیات ۱', units: '۳' },
        { name: 'تحقیق در عملیات ۲', units: '۳' },
        { name: 'پیشگیری از جرم', units: '۱' },
        { name: 'صرف کاربردی ۱', units: '۲' },
        { name: 'صرف کاربردی ۲', units: '۲' },
        { name: 'نحو کاربردی ۱', units: '۴' },
        { name: 'نحو کاربردی ۲', units: '۴' }
      ]},
      { id: 'c-asli', name: 'دروس اصلی (کلیه رشته‌ها)', items: [
        { name: 'اخلاق، حقوق و قضا', units: '۱' },
        { name: 'مدارهای الکتریکی ۱', units: '۳' },
        { name: 'مدارهای الکتریکی ۲', units: '۲' },
        { name: 'مدار منطقی', units: '۳' },
        { name: 'جبر خطی', units: '۳' },
        { name: 'ریاضی مهندسی', units: '۳' },
        { name: 'ساختمان داده‌ها', units: '۳' },
        { name: 'طراحی الگوریتم‌ها', units: '۳' }
      ]}
    ],

    /* جدول شهریه (ریال) */
    fees: {
      cols: ['گروه', 'عمومی نظری', 'عمومی عملی', 'پایه نظری', 'اصلی/تخصصی نظری', 'شهریه ثابت'],
      rows: [
        ['فنی‌ومهندسی / علوم‌پایه / کشاورزی', '۳٬۶۳۷٬۶۲۸', '۶٬۸۲۲٬۷۳۳', '۷٬۲۹۸٬۶۰۳', '۷٬۲۹۸٬۶۰۳', '۱۵٬۴۹۳٬۴۰۰'],
        ['هنر', '۳٬۶۳۷٬۶۲۸', '۶٬۸۲۲٬۷۳۳', '۶٬۴۲۸٬۶۰۹', '۶٬۴۲۸٬۶۰۹', '۱۳٬۷۳۵٬۸۹۷'],
        ['علوم‌انسانی و حکمرانی', '۳٬۶۳۷٬۶۲۸', '۵٬۴۵۶٬۴۴۲', '۴٬۵۵۴٬۳۲۸', '۵٬۴۵۹٬۳۵۷', '۱۰٬۹۳۹٬۰۷۳'],
        ['پزشکی / دندان‌پزشکی', '۸٬۰۳۶٬۸۰۵', '۱۱٬۱۶۲٬۲۳۰', '۱۷٬۸۵۹٬۵۶۷', '—', '—'],
        ['پرستاری', '۸٬۰۳۶٬۸۰۵', '۱۱٬۱۶۲٬۲۳۰', '۸٬۰۳۶٬۸۰۵', '—', '—']
      ],
      note: 'مبالغ به ریال و برای هر واحد است؛ شهریه‌ی ثابت یک‌بار در ترم دریافت می‌شود. ارقام مطابق اطلاعیه‌ی رسمی ترم تابستان ۴۰۴۳ است.'
    },

    /* اساتید — در ابتدا خالی است و بعداً از پنل مدیریت اضافه می‌شود */

    /* لینک‌های مهم */
    links: [
      { icon: '🎥', title: 'سامانه‌ی ویانا (کلاس‌های مجازی)', url: 'https://vshahed.viannacloud.ir/lms/login', desc: 'ورود به کلاس‌های آنلاین ترم تابستان' },
      { icon: '🖥️', title: 'سامانه‌ی بهستان', url: 'https://eduportal.shahed.ac.ir/', desc: 'انتخاب واحد و پرداخت شهریه' },
      { icon: '📝', title: 'سامانه‌ی ثبت‌نام غیرشاهدی', url: 'https://sabt.shahed.ac.ir', desc: 'ویژه‌ی متقاضیان غیرشاهدی' }
    ],

    /* راه‌های ارتباطی */
    contacts: [
      { name: 'امور دانشجویی شاهد', handle: '@Omor_Shahed', type: 'telegram', role: 'کانال اطلاع‌رسانی' }
    ],

    footer: {
      text: 'تمامی حقوق برای امور دانشجویی دانشگاه شاهد محفوظ است',
      channel: '@Omor_Shahed',
      year: '۱۴۰۵'
    }
  };

  /* ادغام برنامه هفتگی تولیدشده از فایل داده */
  if (window.SCHEDULE_DATA) {
    DEFAULT.schedule = window.SCHEDULE_DATA.schedule;
    DEFAULT.scheduleDays = window.SCHEDULE_DATA.days;
    DEFAULT.scheduleTimes = window.SCHEDULE_DATA.times;
    DEFAULT.scheduleNotes = window.SCHEDULE_DATA.notes;
  }

  /* ---------------- لایه ذخیره‌سازی ---------------- */
  var KEY = 'shahedSummer.data.v1';
  var THEME_KEY = 'shahedSummer.theme';

  function deepClone(o) { return JSON.parse(JSON.stringify(o)); }

  var Store = {
    defaults: DEFAULT,
    THEME_KEY: THEME_KEY,
    load: function () {
      try {
        var raw = localStorage.getItem(KEY);
        if (!raw) return deepClone(DEFAULT);
        var saved = JSON.parse(raw);
        /* ادغام کم‌عمق: کلیدهای ذخیره‌نشده از پیش‌فرض می‌آیند */
        var merged = deepClone(DEFAULT);
        Object.keys(saved).forEach(function (k) { merged[k] = saved[k]; });
        return merged;
      } catch (e) { return deepClone(DEFAULT); }
    },
    save: function (data) {
      localStorage.setItem(KEY, JSON.stringify(data));
    },
    reset: function () { localStorage.removeItem(KEY); },
    export: function () { return JSON.stringify(this.load(), null, 2); },
    import: function (json) {
      var obj = JSON.parse(json);
      this.save(obj);
    }
  };

  window.Store = Store;
})();
