/* global React */
const { useEffect: useEffectTos, useRef: useRefTos } = React;

function TermsModal({ open, onClose }) {
  const dialogRef = useRefTos(null);
  const headingId = 'tos-heading';

  useEffectTos(() => {
    if (!open) return;
    const dialog = dialogRef.current;
    if (!dialog) return;
    const focusable = dialog.querySelectorAll(
      'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
    );
    const first = focusable[0];
    const last = focusable[focusable.length - 1];
    const trap = (e) => {
      if (e.key === 'Escape') { onClose(); return; }
      if (e.key !== 'Tab') return;
      if (focusable.length === 0) { e.preventDefault(); return; }
      if (e.shiftKey) {
        if (document.activeElement === first) { e.preventDefault(); last.focus(); }
      } else {
        if (document.activeElement === last) { e.preventDefault(); first.focus(); }
      }
    };
    document.addEventListener('keydown', trap);
    setTimeout(() => first && first.focus(), 50);
    return () => document.removeEventListener('keydown', trap);
  }, [open, onClose]);

  if (!open) return null;

  return (
    React.createElement(React.Fragment, null,
      React.createElement('div', {
        onClick: onClose,
        'aria-hidden': 'true',
        style: {
          position: 'fixed', inset: 0, zIndex: 9100,
          background: 'rgba(0,0,0,0.60)',
          backdropFilter: 'blur(2px)', WebkitBackdropFilter: 'blur(2px)',
          animation: 'mlnFade 220ms ease',
        },
      }),
      React.createElement('div', {
        ref: dialogRef,
        role: 'dialog',
        'aria-modal': 'true',
        'aria-labelledby': headingId,
        style: {
          position: 'fixed', top: '50%', left: '50%',
          transform: 'translate(-50%, -50%)',
          width: 'min(680px, calc(100vw - 32px))',
          maxHeight: 'min(84vh, 720px)',
          zIndex: 9101,
          background: 'var(--paper)',
          borderRadius: 'var(--radius-xl)',
          boxShadow: '0 32px 80px rgba(74,14,24,0.38)',
          display: 'flex', flexDirection: 'column',
          animation: 'mlnPop 260ms ease',
          overflow: 'hidden',
        },
      },
        /* Header */
        React.createElement('div', {
          style: {
            display: 'flex', alignItems: 'center', justifyContent: 'space-between',
            padding: '20px 24px 16px',
            borderBottom: '1px solid var(--border)',
            flexShrink: 0,
          },
        },
          React.createElement('h2', {
            id: headingId,
            style: {
              fontFamily: 'var(--font-display)', fontWeight: 700,
              fontSize: 'clamp(1.1rem, 2.5vw, 1.4rem)',
              color: 'var(--ink-900)', margin: 0,
            },
          }, 'תקנון ותנאי שימוש – "מילים לנצח"'),
          React.createElement('button', {
            onClick: onClose,
            'aria-label': 'סגירה',
            style: {
              width: 36, height: 36, borderRadius: '50%',
              border: '1px solid var(--border)', background: 'var(--white)',
              color: 'var(--ink-500)', cursor: 'pointer',
              display: 'flex', alignItems: 'center', justifyContent: 'center',
              flexShrink: 0, fontSize: 20, lineHeight: 1,
            },
          }, '×')
        ),

        /* Scrollable body */
        React.createElement('div', {
          style: {
            overflowY: 'auto', padding: '24px 28px',
            fontFamily: 'var(--font-body)', fontSize: 15, lineHeight: 1.85,
            color: 'var(--ink-700)', direction: 'rtl', textAlign: 'right',
          },
        },
          tos1(), tos2(), tos3(), tos4(), tos5(), tos6(), tos7(), tos8(),
          React.createElement('p', {
            style: { margin: '0 0 12px', color: 'var(--ink-400)', fontSize: 13 },
          }, 'תאריך עדכון התקנון: 21.06.2026')
        ),

        /* Footer */
        React.createElement('div', {
          style: {
            padding: '16px 24px',
            borderTop: '1px solid var(--border)',
            display: 'flex', justifyContent: 'center',
            flexShrink: 0,
          },
        },
          React.createElement('button', {
            onClick: onClose,
            style: {
              background: 'var(--brand)', color: '#fff', border: 'none', cursor: 'pointer',
              fontFamily: 'var(--font-body)', fontWeight: 700, fontSize: 15.5,
              padding: '12px 40px', borderRadius: 'var(--radius-pill)',
              boxShadow: 'var(--shadow-red)', transition: 'all 200ms var(--ease-soft)',
            },
            onMouseEnter: e => e.currentTarget.style.background = 'var(--red-700)',
            onMouseLeave: e => e.currentTarget.style.background = 'var(--brand)',
          }, 'הבנתי, סגור')
        )
      )
    )
  );
}

function tosSection(title, ...paras) {
  return React.createElement('section', { style: { marginBottom: 24 } },
    React.createElement('h3', {
      style: {
        fontFamily: 'var(--font-display)', fontWeight: 700, fontSize: 17,
        color: 'var(--brand)', margin: '0 0 10px',
      },
    }, title),
    ...paras.map((text, i) =>
      React.createElement('p', { key: i, style: { margin: '0 0 12px', textAlign: 'right' } }, text)
    )
  );
}

function tos1() {
  return tosSection('1. כללי',
    'האתר "מילים לנצח" (להלן: "האתר"), המופעל על ידי אודליה מאיר (להלן: "העסק" או "בעלת העסק"), משמש כאתר תדמית ומידע המציג את הספר, ההרצאות והתכנים של בעלת העסק.',
    'הגלישה והשימוש באתר, כולל השארת פרטים בטפסים השונים, כפופים לתנאים המפורטים בתקנון זה. עצם השימוש באתר מהווה הסכמה מלאה ובלתי מסויגת לתנאים אלו.',
    'התקנון מנוסח בלשון זכר מטעמי נוחות בלבד, אך פונה לנשים וגברים כאחד.'
  );
}
function tos2() {
  return tosSection('2. קבלת הצעות מחיר, קביעת מחירים ויצירת קשר',
    'האתר אינו מהווה חנות דיגיטלית לביצוע רכישות ישירות, אלא משמש כפלטפורמה ליצירת קשר, בירורים וקבלת הצעות מחיר מותאמות אישית (עבור הרצאות, סדנאות, או רכישת הספר).',
    'כל המחירים או הערכות המחיר שיימסרו ללקוח נקבעים באופן בלעדי על ידי בעלת העסק ועל פי חישובים ומדדים פנימיים שלה. מחירים אלו הם בגדר הצעה בלבד, והלקוח אינו מחויב לקבלם או להתקשר בעסקה.',
    'השארת פרטים באתר אינה מהווה התחייבות לביצוע עסקה מצד הגולש או מצד העסק. עסקה תיחשב לסגורה ומחייבת אך ורק לאחר תיאום ישיר, חתימה על הסכם עבודה או אישור הזמנה מסודר, וביצוע התשלום בהתאם לסיכום.'
  );
}
function tos3() {
  return tosSection('3. תנאי הזמנת הרצאות וסדנאות',
    'הזמנת הרצאה או סדנאות פרונטליות/דיגיטליות מותנית בתיאום מראש ובאישור בכתב של אודליה מאיר.',
    'יובהר כי בעלת העסק שומרת לעצמה את הזכות המלאה, על פי שיקול דעתה הבלעדי והמקצועי, שלא לאשר הזמנת הרצאה, לבטל הרצאה שתואמה מראש, או שלא להגיע להרצאה במידה והיא אינה מעוניינת בכך או מכל סיבה אחרת (בכפוף לתנאי הביטול וההחזרים הכספיים שיוגדרו מראש מול המזמין בהסכם ההתקשרות הפרטני).'
  );
}
function tos4() {
  return tosSection('4. קניין רוחני וזכויות יוצרים',
    'כל הזכויות בתכנים המופיעים באתר, לרבות טקסטים, תיאור הספר, קטעי הרצאות, סרטונים, תמונות, לוגו, עיצובים גרפיים ואלמנטים ויזואליים, שמורות במלואן ל"מילים לנצח" ולאודליה מאיר.',
    'חל איסור מוחלט להעתיק, לשכפל, להפיץ, להציג בפומבי, לתרגם או לעשות כל שימוש מסחרי או אחר בתכני האתר ללא קבלת אישור מפורש בכתב ומראש מבעלת העסק.'
  );
}
function tos5() {
  return tosSection('5. מדיניות פרטיות ושמירת נתונים',
    'המידע שנמסר על ידי הגולש באתר נשמר באופן מאובטח לצרכי העסק וחזרה אליו בלבד, לצורך מתן מענה לפניותיו ושליחת הצעות המחיר המבוקשות.',
    'הפרטים האישיים נשמרים לשימוש הפנימי של העסק בלבד, ולא יועברו, יימכרו או יופצו לאף גורם צד שלישי.'
  );
}
function tos6() {
  return tosSection('6. הגבלת אחריות',
    'העסק עושה מאמצים רבים כדי להבטיח שהמידע המוצג באתר יהיה מדויק ועדכני. עם זאת, ייתכן שייפלו טעויות קולמוס או אי-דיוקים זמניים בתיאור הספר, השירותים או המחירים המצוינים באתר, והעסק לא יישא באחריות לכך.',
    'תכני האתר, ובכלל זה תיאור הספר, המאמרים או התקצירים, מוצגים למטרות העשרה ומידע כללי בלבד. אין לראות בהם ייעוץ מקצועי, טיפולי או תחליף לייעוץ אישי המותאם לצרכי הלקוח.',
    'העסק אינו אחראי לכל נזק, ישיר או עקיף, שעלול להיגרם לגולש או לצד שלישי כתוצאה משימוש באתר, מהסתמכות על התוכן שבו, או בשל תקלות טכניות זמניות בזמינות האתר.'
  );
}
function tos7() {
  return React.createElement('section', { style: { marginBottom: 24 } },
    React.createElement('h3', {
      style: {
        fontFamily: 'var(--font-display)', fontWeight: 700, fontSize: 17,
        color: 'var(--brand)', margin: '0 0 10px',
      },
    }, '7. יצירת קשר'),
    React.createElement('p', { style: { margin: '0 0 12px', textAlign: 'right' } },
      'לשאלות או בירורים בנוגע לתנאי השימוש והתקנון, ניתן לפנות אלינו באמצעות כתובת המייל: ',
      React.createElement('a', {
        href: 'mailto:milim.lanetzah@gmail.com',
        style: { color: 'var(--brand)' },
      }, 'milim.lanetzah@gmail.com')
    )
  );
}

function tos8() {
  return React.createElement('section', { style: { marginBottom: 24 } },
    React.createElement('h3', {
      style: { fontFamily: 'var(--font-display)', fontWeight: 700, fontSize: 17, color: 'var(--brand)', margin: '0 0 10px' },
    }, '8. זכות ביטול ומדיניות החזרות'),

    React.createElement('h4', { style: { fontFamily: 'var(--font-body)', fontWeight: 700, fontSize: 15, color: 'var(--ink-900)', margin: '0 0 6px' } }, 'ביטול רכישת מוצרים (ספרים, כרטיסים, מוצרים פיזיים)'),
    React.createElement('p', { style: { margin: '0 0 10px', textAlign: 'right' } },
      'בהתאם לתקנות הגנת הצרכן (ביטול עסקה), התשע"א-2010, הלקוח רשאי לבטל עסקה לרכישת מוצר תוך 14 ימי עסקים ממועד קבלת המוצר בפועל.'
    ),
    React.createElement('p', { style: { margin: '0 0 10px', textAlign: 'right' } },
      'במקרה של ביטול בתוך המועד הקבוע, יינתן החזר כספי בניכוי דמי ביטול בגובה 5% ממחיר העסקה. דמי משלוח לא יוחזרו. החזרת המוצר תתבצע באריזתו המקורית ובמצב תקין ושלם.'
    ),

    React.createElement('h4', { style: { fontFamily: 'var(--font-body)', fontWeight: 700, fontSize: 15, color: 'var(--ink-900)', margin: '12px 0 6px' } }, 'ביטול הזמנת הרצאה / סדנה'),
    React.createElement('p', { style: { margin: '0 0 10px', textAlign: 'right' } },
      'ניתן לבטל הזמנת הרצאה או סדנה תוך 14 ימי עסקים ממועד קביעת ההזמנה. ביטול בתוך מועד זה יזכה בהחזר כספי מלא, בניכוי דמי ביטול בגובה 5% מסכום העסקה.'
    ),
    React.createElement('p', { style: { margin: '0 0 10px', textAlign: 'right' } },
      'ביטול לאחר תום 14 ימי העסקים — תנאי הביטול וההחזר הכספי ייקבעו בהסכמה פרטנית בין הצדדים, בהתאם לנסיבות ולשלב שבו מצויה העסקה.'
    ),

    React.createElement('h4', { style: { fontFamily: 'var(--font-body)', fontWeight: 700, fontSize: 15, color: 'var(--ink-900)', margin: '12px 0 6px' } }, 'כיצד לבטל עסקה'),
    React.createElement('p', { style: { margin: '0 0 6px', textAlign: 'right' } },
      'לביטול עסקה יש לפנות בכתב (מייל) או בטלפון:'
    ),
    React.createElement('ul', { style: { margin: '0 0 10px', paddingRight: 22, paddingLeft: 0 } },
      React.createElement('li', { style: { marginBottom: 4 } },
        React.createElement('a', { href: 'mailto:milim.lanetzah@gmail.com', style: { color: 'var(--brand)' } }, 'milim.lanetzah@gmail.com')
      ),
      React.createElement('li', null,
        React.createElement('a', { href: 'tel:0544618647', style: { color: 'var(--brand)' } }, '054-461-8647')
      )
    )
  );
}

window.TermsModal = TermsModal;
