/* ============ LEGAL: privacy policy, terms of use, accessibility statement, consent ============
   Israel-aligned (חוק הגנת הפרטיות + תיקון 13, 2025). The app is FREE and NON-COMMERCIAL —
   the only money flow is a voluntary Ko-fi "buy me a coffee" tip handled entirely by Ko-fi.
   Texts are written to be plain, honest and defensive (clear scope, AS-IS, limited liability).
   NOTE: replace CONTACT_EMAIL with your preferred public contact address if needed.
============================================================================== */
(function(){
  const { useState } = React;
  const db = ()=>window.fbDb;

  const POLICY_VERSION = '2026-06';            // bump to force re-consent after material changes
  const UPDATED        = 'יוני 2026';
  const CONTACT_EMAIL  = 'moyalnh@gmail.com';  // public contact for privacy + accessibility requests
  const db_LOCATION    = 'איחוד אירופי (Google Firebase, אזור europe-west1 — בלגיה)';

  // public contact channels for the collaboration invite.
  // ← מלאו את הערוצים שלכם: twitter/github מוצגים רק אם הוזנו כאן.
  const CONTACT = {
    email:   CONTACT_EMAIL,
    site:    'bankbuk.app',
    twitter: '@MoyalNet',
    github:  'github.com/MoyalNet',
  };

  /* ---------- document content (sections of {h, p:[...]}) ---------- */
  const PRIVACY = {
    title:'מדיניות פרטיות',
    intro:'בנקבוק היא אפליקציה חינמית ולא-מסחרית לאיסוף בקבוקים ופחיות ולחישוב פיקדון, שנבנתה כפרויקט קהילתי. אנחנו מכבדים את פרטיותכם ואוספים את המינימום ההכרחי כדי שהשירות יעבוד. מסמך זה נכתב ברוח חוק הגנת הפרטיות, התשמ"א–1981 ותיקון 13 לו.',
    sections:[
      {h:'מי אנחנו', p:['בנקבוק היא יוזמה פרטית, חינמית ולא-מסחרית. איננו מוכרים מידע, איננו מציגים פרסומות ואיננו סוחרים בנתונים. הדרך היחידה לתמוך היא תרומה וולונטרית דרך כפתור "קנו לי קפה" (Ko-fi) — ראו בהמשך.']},
      {h:'איזה מידע נאסף', p:[
        'מידע שאתם מספקים: כתובת אימייל (להתחברות), שם תצוגה, ודמות/תמונת פרופיל (אימוג\'י מתוך מאגר, או תמונה שאתם בוחרים להעלות).',
        'מידע שנוצר תוך שימוש: שם הקבוצה והגדרותיה, ספירת המכלים שהזנתם, הודעות שכתבתם בצ\'אט הקבוצתי, ותמונות קבלה שאתם בוחרים להעלות לאימות.',
        'לגבי משתתפים ללא חשבון (ילדים/בני משפחה שהורה מוסיף): שם תצוגה ודמות בלבד — אנו לא מבקשים אימייל, טלפון או פרטים מזהים נוספים.',
        'מידע טכני בסיסי הנדרש לאבטחה ולתפעול (כגון מזהה התחברות שמנפיק ספק התשתית). איננו משתמשים בכלי מעקב פרסומיים.',
      ]},
      {h:'למה משתמשים במידע', p:['רק כדי להפעיל את השירות: לזהות אתכם, לסנכרן את הספירה והדירוג בין חברי הקבוצה, להציג צ\'אט קבוצתי ולשמור את העדפותיכם. איננו עושים במידע שימוש אחר.']},
      {h:'היכן המידע נשמר', p:['המידע נשמר בשירותי הענן של Google Firebase, המשמשים כקבלן עיבוד מטעמנו, בשרתים שמיקומם '+db_LOCATION+'. ההעברה לאתר מאובטחת (HTTPS).']},
      {h:'מי רואה את המידע', p:[
        'בתוך קבוצה — חברי אותה קבוצה רואים זה את שמו, דמותו, הספירה והודעות הצ\'אט של זה. זהו אופי השירות ("שקיפות קבוצתית"), והוא מובהר לכם בעת ההצטרפות.',
        'קבוצות אחרות אינן רואות את הקבוצה שלכם. בלוח הדירוג הכללי מוצגים שם ודמות בלבד לצד התוצאה.',
        'איננו מעבירים מידע לצדדים שלישיים, למעט ספק התשתית (Google) וכמתחייב על פי דין.',
      ]},
      {h:'הזכויות שלכם', p:['על פי חוק, אתם רשאים לעיין במידע שעליכם, לבקש את תיקונו ולבקש את מחיקתו. רוב הפעולות זמינות ישירות באפליקציה (עריכת פרופיל, מחיקת חשבון), וניתן גם לפנות אלינו לכתובת '+CONTACT_EMAIL+'.']},
      {h:'מחיקת מידע', p:['אתם יכולים למחוק את חשבונכם והנתונים האישיים שלו דרך ההגדרות. מנהל קבוצה יכול להסיר חבר ולמחוק את הספירה שלו, וכן למחוק קבוצה כולה. לאחר מחיקה המידע מוסר ואינו ניתן לשחזור.']},
      {h:'ילדים וקטינים', p:[
        'בנקבוק מיועד לשימוש משפחתי/קבוצתי. הוספת ילד או קטין נעשית אך ורק על ידי הורה או אפוטרופוס, ובאישורו המפורש. ההורה/אפוטרופוס אחראי על השתתפות הקטין ועל המידע שמוזן עבורו.',
        'אנו ממזערים את המידע על קטינים (שם ודמות בלבד) ואיננו אוספים מהם מידע מעבר לכך.',
      ]},
      {h:'עוגיות ואחסון מקומי', p:['אנו משתמשים באחסון מקומי בדפדפן (localStorage) ובמנגנון התחברות, למטרות טכניות בלבד — לזכור שאתם מחוברים ולשמור העדפות (כגון השתקת צלילים). אין שימוש בעוגיות פרסום או מעקב.']},
      {h:'תמיכה כספית (Ko-fi)', p:['כפתור "קנו לי קפה" מפנה לשירות חיצוני (Ko-fi). תרומה היא וולונטרית לחלוטין ואינה נדרשת לשימוש. איננו אוספים או רואים את פרטי התשלום שלכם — הם מנוהלים כולם על ידי Ko-fi בהתאם למדיניות שלו.']},
      {h:'אבטחה', p:['אנו נוקטים אמצעים סבירים: גישה מבוקרת לפי כללי הרשאה, הצפנת תעבורה, והפרדה בין קבוצות. עם זאת, אף שירות מקוון אינו חסין לחלוטין, ואיננו יכולים להבטיח אבטחה מוחלטת.']},
      {h:'שינויים במדיניות', p:['נעדכן מסמך זה מעת לעת. בעת שינוי מהותי נבקש את הסכמתכם מחדש. גרסה נוכחית: '+POLICY_VERSION+' · עודכן: '+UPDATED+'.']},
      {h:'יצירת קשר', p:['בשאלות פרטיות, בקשות עיון/תיקון/מחיקה: '+CONTACT_EMAIL+'. על מסמך זה חל הדין הישראלי.']},
    ],
  };

  const TERMS = {
    title:'תנאי שימוש',
    intro:'השימוש בבנקבוק כפוף לתנאים הבאים. עצם השימוש מהווה הסכמה להם. השירות ניתן חינם, כפרויקט קהילתי, "כמות שהוא".',
    sections:[
      {h:'מהות השירות', p:['בנקבוק הוא כלי עזר לחישוב פיקדון ולמעקב קבוצתי. חישוב הפיקדון הוא הערכה בלבד לפי תעריפי הפיקדון בישראל; הסכום המחייב הוא זה שנקבע בפועל במכונת הפיקדון או אצל הקמעונאי. איננו צד לכל עסקת פיקדון.']},
      {h:'התנהגות מותרת', p:[
        'אסור בהחלט: תוכן פוגעני, מטריד, מאיים, מבזה, גזעני, מיני, אלים, בריונות רשת, ספאם, התחזות לאחר, או כל שימוש שפוגע באחרים — בפרט בקטינים.',
        'הצ\'אט מיועד לתיאום ועידוד בלבד. הפרה תוביל למחיקת תוכן, להסרת המשתמש מהקבוצה ו/או לחסימה, לפי שיקול דעת מנהל הקבוצה ומפעילי האפליקציה.',
        'משתמשים יכולים לדווח על תוכן פוגעני; מנהל הקבוצה יכול למחוק כל הודעה ולהסיר חברים.',
      ]},
      {h:'אחריות מנהל הקבוצה', p:['פותח/ת הקבוצה ומנהליה הם המבוגרים האחראים לקבוצה ולמשתתפים בה, לרבות קטינים שנוספו. עליהם לפקח על התוכן ולנהוג באחריות.']},
      {h:'קטינים', p:['שימוש על ידי קטין או הוספת קטין מותרים אך ורק באישור הורה/אפוטרופוס ובאחריותו, כמפורט במדיניות הפרטיות.']},
      {h:'מתן השירות "כמות שהוא"', p:['השירות ניתן ללא כל אחריות מכל סוג (AS IS / AS AVAILABLE). איננו מתחייבים לזמינות רציפה, לדיוק החישובים, לשמירת הנתונים או להיעדר תקלות, ורשאים לשנות, להשהות או להפסיק את השירות בכל עת.']},
      {h:'הגבלת אחריות', p:['במידה המרבית המותרת בדין, לא נישא באחריות לכל נזק ישיר, עקיף, תוצאתי או אחר הנובע מהשימוש בשירות, מאובדן נתונים, מתוכן שהעלו משתמשים, או מהסתמכות על החישובים. השימוש הוא על אחריותכם בלבד.']},
      {h:'תוכן משתמשים', p:['האחריות לתוכן שאתם מעלים (שם, תמונה, הודעות, קבלות) היא עליכם. אתם מתחייבים שלא להעלות תוכן מפר חוק, פוגעני או של אחרים ללא רשות.']},
      {h:'שיפוי', p:['תפצו ותשפו אותנו בגין כל תביעה או נזק הנובעים מהפרת תנאים אלה מצדכם או משימוש לרעה מצדכם בשירות.']},
      {h:'דין וסמכות שיפוט', p:['על תנאים אלה חל הדין הישראלי, וסמכות השיפוט הבלעדית נתונה לבתי המשפט המוסמכים בישראל.']},
      {h:'שינויים', p:['נוכל לעדכן תנאים אלה מעת לעת. המשך שימוש לאחר עדכון מהווה הסכמה. גרסה: '+POLICY_VERSION+' · עודכן: '+UPDATED+'.']},
    ],
  };

  const ACCESS = {
    title:'הצהרת נגישות',
    intro:'אנו רואים חשיבות רבה בכך שבנקבוק יהיה נגיש לכלל המשתמשים, לרבות אנשים עם מוגבלות, ופועלים לשפר את הנגישות באופן מתמשך.',
    sections:[
      {h:'רמת הנגישות', p:['האפליקציה נבנתה במאמץ לעמוד בעקרונות תקן ישראלי ת"י 5568 ובהנחיות WCAG 2.0 ברמה AA, כמיטב היכולת של פרויקט קהילתי חינמי.']},
      {h:'מה כבר נעשה', p:[
        'תמיכה מלאה בעברית ובכיווניות מימין-לשמאל (RTL).',
        'אפשרות להגדיל את התצוגה (זום) ללא חסימה.',
        'טקסט גדול וברור, כפתורים גדולים ואזורי לחיצה נדיבים.',
        'תוויות טקסט לקוראי מסך על כפתורי פעולה, וסימון מצב פוקוס למקלדת.',
        'כיבוד העדפת "צמצום תנועה" (prefers-reduced-motion) — האנימציות נכבות עבור מי שמבקש זאת.',
      ]},
      {h:'מגבלות ידועות', p:['בנקבוק הוא פרויקט וולונטרי בפיתוח מתמשך. ייתכן שרכיבים מסוימים (למשל מפות חיצוניות או תכנים שהמשתמשים מעלים) טרם הונגשו במלואם. אנו פועלים לתקן זאת בהדרגה.']},
      {h:'דרכי פנייה בנושא נגישות', p:['נתקלתם בקושי? נשמח לדעת ולתקן. פנו אלינו לכתובת '+CONTACT_EMAIL+' ונשתדל להגיב בהקדם.']},
      {h:'עדכון ההצהרה', p:['הצהרה זו עודכנה ב-'+UPDATED+'.']},
    ],
  };

  const DOCS = { privacy:PRIVACY, terms:TERMS, access:ACCESS };

  /* ---------- one document, scrollable ---------- */
  function DocBody({doc}){
    return (
      <div className="legal-body">
        <p className="legal-intro">{doc.intro}</p>
        {doc.sections.map((s,i)=>(
          <section className="legal-sec" key={i}>
            <h4>{s.h}</h4>
            {s.p.map((para,j)=>(<p key={j}>{para}</p>))}
          </section>
        ))}
      </div>
    );
  }

  /* ---------- modal with three tabs ---------- */
  function LegalModal({initial, onClose}){
    const [which,setWhich]=useState(initial||'privacy');
    const doc=DOCS[which]||PRIVACY;
    return (
      <div className="sheet-bg" onClick={onClose} style={{alignItems:'stretch'}}>
        <div className="legal-modal" onClick={e=>e.stopPropagation()} role="dialog" aria-label={doc.title}>
          <div className="legal-head">
            <h3>{doc.title}</h3>
            <button type="button" className="gv-icon" onClick={onClose} aria-label="סגירה">✕</button>
          </div>
          <div className="legal-tabs" role="tablist">
            <button type="button" role="tab" aria-selected={which==='privacy'} className={which==='privacy'?'on':''} onClick={()=>setWhich('privacy')}>פרטיות</button>
            <button type="button" role="tab" aria-selected={which==='terms'} className={which==='terms'?'on':''} onClick={()=>setWhich('terms')}>תנאי שימוש</button>
            <button type="button" role="tab" aria-selected={which==='access'} className={which==='access'?'on':''} onClick={()=>setWhich('access')}>נגישות</button>
          </div>
          <DocBody doc={doc}/>
        </div>
      </div>
    );
  }

  /* ---------- small footer link row ---------- */
  function LegalLinks({onOpen, style}){
    return (
      <div className="legal-links" style={style}>
        <button type="button" className="linkbtn" onClick={()=>onOpen('privacy')}>מדיניות פרטיות</button>
        <span aria-hidden="true">·</span>
        <button type="button" className="linkbtn" onClick={()=>onOpen('terms')}>תנאי שימוש</button>
        <span aria-hidden="true">·</span>
        <button type="button" className="linkbtn" onClick={()=>onOpen('access')}>הצהרת נגישות</button>
      </div>
    );
  }

  /* ---------- full-screen consent gate (logged-in users) ---------- */
  function ConsentScreen({uid, name, onAgreed, toast}){
    const [agree,setAgree]=useState(false);
    const [busy,setBusy]=useState(false);
    const [legal,setLegal]=useState(null);
    const submit=async()=>{
      if(!agree) return; setBusy(true);
      try{
        await db().ref('users/'+uid+'/consent').set({v:POLICY_VERSION, ts:Date.now()});
        onAgreed&&onAgreed();
      }catch(ex){ console.warn('[consent]',ex&&ex.code); toast&&toast('שגיאה בשמירת ההסכמה'); setBusy(false); }
    };
    return (
      <div className="center-screen">
        <div className="brandmark">
          <div className="logo"><img src="icons/icon-192.png" alt="בנקבוק"/></div>
          <h1>{name?('עוד רגע, '+name+'!'):'ברוכים הבאים!'}</h1>
          <p>כמה דברים קטנים לפני שמתחילים</p>
        </div>
        <div className="card">
          <p style={{color:'#5e7468',fontWeight:600,lineHeight:1.6,margin:'0 0 12px',textWrap:'pretty'}}>
            בנקבוק היא אפליקציה <b>חינמית ולא-מסחרית</b>. אנחנו אוספים את המינימום ההכרחי, לא מוכרים מידע ולא מציגים פרסומות. בתוך קבוצה — החברים רואים זה את הספירה והצ'אט של זה.
          </p>
          <div className="free-love">
            <span className="fl-emoji">💚</span>
            <div>בנקבוק חינמית לגמרי ובלי פרסומות — וכך נשמח שתישאר. אם בא לכם לעזור לנו להמשיך לפתח, כל תמיכה (בכל סכום שתרצו) מתקבלת בחיבוק גדול. בלי לחץ — תמיד אפשר פשוט ליהנות 🙂</div>
          </div>
          <button type="button" className="btn soft sm" style={{width:'100%',marginBottom:14}} onClick={()=>setLegal('privacy')}>📄 לקריאת מדיניות הפרטיות ותנאי השימוש</button>
          <label className="consent-check">
            <input type="checkbox" checked={agree} onChange={e=>setAgree(e.target.checked)}/>
            <span>קראתי ואני מסכים/ה למדיניות הפרטיות ולתנאי השימוש. אם אני מוסיף/ה ילד/ה או קטין/ה — אני ההורה/אפוטרופוס ומאשר/ת זאת.</span>
          </label>
          <button className="btn" disabled={!agree||busy} onClick={submit} style={{marginTop:14}}>{busy?'רגע…':'אני מסכים/ה, קדימה! ✨'}</button>
        </div>
        <LegalLinks onOpen={setLegal} style={{marginTop:16}}/>
        {legal && <LegalModal initial={legal} onClose={()=>setLegal(null)}/>}
      </div>
    );
  }

  /* ---------- parental gate for kids mode (no-login family entry) ---------- */
  function KidsParentGate({onAgree, onExit}){
    const [agree,setAgree]=useState(false);
    const [legal,setLegal]=useState(null);
    return (
      <div className="center-screen">
        <div className="brandmark">
          <div className="logo"><img src="icons/icon-192.png" alt="בנקבוק"/></div>
          <h1>אזור הילדים 👧</h1>
          <p>אישור הורה / אפוטרופוס</p>
        </div>
        <div className="card">
          <p style={{color:'#5e7468',fontWeight:600,lineHeight:1.6,margin:'0 0 14px',textWrap:'pretty'}}>
            אזור זה מיועד לילדים, וההורה/אפוטרופוס אחראי על ההשתתפות. אנו אוספים שם ודמות בלבד, ללא אימייל או פרטים מזהים. הצ'אט גלוי לחברי הקבוצה.
          </p>
          <button type="button" className="btn soft sm" style={{width:'100%',marginBottom:14}} onClick={()=>setLegal('privacy')}>📄 מדיניות פרטיות ותנאי שימוש</button>
          <label className="consent-check">
            <input type="checkbox" checked={agree} onChange={e=>setAgree(e.target.checked)}/>
            <span>אני ההורה/אפוטרופוס, קראתי את המדיניות ומאשר/ת את השתתפות הילד/ה.</span>
          </label>
          <button className="btn" disabled={!agree} onClick={()=>{ try{localStorage.setItem('bottlex-kids-consent',POLICY_VERSION);}catch(e){} onAgree&&onAgree(); }} style={{marginTop:14}}>אישור וכניסה 🌳</button>
          {onExit && <button className="linkbtn" style={{marginTop:12,color:'#9bb0a4'}} onClick={onExit}>כניסה עם חשבון אחר ←</button>}
        </div>
        {legal && <LegalModal initial={legal} onClose={()=>setLegal(null)}/>}
      </div>
    );
  }

  /* ---------- collaboration invite + "write to us" form (stored as a lead, owner sees it) ---------- */
  function CollabInvite(){
    const [name,setName]=useState('');
    const [org,setOrg]=useState('');
    const [contact,setContact]=useState('');
    const [msg,setMsg]=useState('');
    const [sent,setSent]=useState(false);
    const [busy,setBusy]=useState(false);
    const [err,setErr]=useState('');
    const uid=(window.fbAuth&&window.fbAuth.currentUser&&window.fbAuth.currentUser.uid)||'';
    const submit=async(e)=>{
      e.preventDefault();
      if(!contact.trim() && !name.trim()){ setErr('נשמח לפחות לשם או לדרך ליצור קשר 🙂'); return; }
      setBusy(true); setErr('');
      try{
        await db().ref('leads').push({ name:name.trim(), org:org.trim(), contact:contact.trim(), msg:msg.trim().slice(0,1000), byUid:uid, ts:Date.now() });
        setSent(true);
      }catch(ex){ console.warn('[lead]',ex&&ex.code); setErr('השליחה נכשלה — אפשר גם לכתוב ישירות למייל '+CONTACT.email); setBusy(false); }
    };
    return (
      <div className="collab-card">
        <div className="collab-emoji">🤝</div>
        <h3>רוצים לשתף פעולה?</h3>
        <p className="collab-lead">יזמים, תאגידי מיחזור, רשויות, בתי ספר או אנשים מאפליקציות פיננסיות לילדים — נשמח להכיר ולחשוב יחד איך לגדל את בנקבוק. מצאתם את זה במקרה? בדיוק אתכם חיפשנו.</p>
        <div className="collab-chips">
          <a className="collab-chip" href={'mailto:'+CONTACT.email} target="_blank" rel="noopener noreferrer">✉️ {CONTACT.email}</a>
          {CONTACT.site && <a className="collab-chip" href={'https://'+CONTACT.site} target="_blank" rel="noopener noreferrer">🌐 {CONTACT.site}</a>}
          {CONTACT.twitter && <a className="collab-chip" href={'https://twitter.com/'+CONTACT.twitter.replace(/^@/,'')} target="_blank" rel="noopener noreferrer">🐦 {CONTACT.twitter}</a>}
          {CONTACT.github && <a className="collab-chip" href={'https://'+CONTACT.github.replace(/^https?:\/\//,'')} target="_blank" rel="noopener noreferrer">💻 {CONTACT.github}</a>}
        </div>
        {sent ? (
          <div className="collab-thanks">תודה! קיבלנו את הפרטים ונחזור אליכם. 💚</div>
        ) : (
          <form className="collab-form" onSubmit={submit}>
            <div className="collab-or">או פשוט השאירו פרטים וניצור קשר:</div>
            {err && <div className="err" style={{marginBottom:8}}>{err}</div>}
            <input className="input" value={name} onChange={e=>setName(e.target.value)} placeholder="שם" maxLength={40}/>
            <input className="input" value={org} onChange={e=>setOrg(e.target.value)} placeholder="חברה / ארגון (לא חובה)" maxLength={60}/>
            <input className="input" dir="auto" value={contact} onChange={e=>setContact(e.target.value)} placeholder="מייל / טלפון / טוויטר ליצירת קשר" maxLength={80}/>
            <textarea className="input collab-msg" value={msg} onChange={e=>setMsg(e.target.value)} placeholder="כמה מילים על הרעיון (לא חובה)" maxLength={1000} rows={3}/>
            <button className="btn" type="submit" disabled={busy}>{busy?'שולח…':'שליחה 🚀'}</button>
          </form>
        )}
      </div>
    );
  }

  Object.assign(window, {
    LEGAL: { POLICY_VERSION, UPDATED, CONTACT_EMAIL, CONTACT, DOCS },
    LegalModal, LegalLinks, ConsentScreen, KidsParentGate, CollabInvite,
  });
})();
