// BeHueman — Enhanced feed: EnhancedPostCard with context menu, translate,
// sponsored/locked variants, comments thread. New Community screen.
// =====================================================================

const FeedExtras = {};

// Sample comments for post detail thread
FeedExtras.getComments = function(postId) {
  return [
    { id:'c1', authorId:'mdebski', time:'1 godz.', text:'To rezonuje. Sam zauważyłem podobny wzorzec u siebie — budzenia o 3-4 zawsze były powiązane z czymś nieprzepracowanym.', likes: 12, replies: [
      { id:'c1r1', authorId:'hannaw', time:'45 min', text:'Dokładnie. Ciało prowadzi pierwsze zapisy. Spróbuj prowadzić dziennik snu przez tydzień.', likes: 8 },
    ]},
    { id:'c2', authorId:'agap', time:'2 godz.', text:'4-7-8 weszło u mnie w nawyk. Polecam każdemu rodzicowi z malutkim dzieckiem — uratowało mi nerwy.', likes: 24, replies: [] },
    { id:'c3', authorId:'lenak', time:'3 godz.', text:'A czy są przeciwwskazania przy nadciśnieniu? Ciekawi mnie to medycznie.', likes: 3, replies: [
      { id:'c3r1', authorId:'hannaw', time:'2 godz.', text:'Nie ma — wręcz przeciwnie, przy nadciśnieniu działa świetnie. Pod warunkiem że nie wstrzymujesz oddechu siłowo.', likes: 15 },
    ]},
  ];
};

// Sponsored sample
FeedExtras.sponsoredPost = {
  id:'sp1', sponsored: true,
  brand: 'Studio Mokshana', brandHue: '#9FB89A',
  cover: ['#9FB89A','#E8B872'],
  title: 'Cykl yin-jogi — 8 niedziel z Hanną',
  body: 'Wieczorne sesje yin, każda w innym temacie. Pierwsza w niedzielę 11 maja.',
  cta: 'Zarezerwuj miejsce — 320 zł',
  meta: '8 sesji · Łódź · 12 miejsc',
};

// Locked digital product post
FeedExtras.lockedPost = {
  id:'lp1', locked: true,
  authorId:'mokshana',
  domain:'cialo',
  sub:'Joga w domu',
  time:'wczoraj',
  preview: 'Pełna sekwencja yin-jogi z prowadzeniem głosowym (47 min). Trzy poziomy — od pierwszego razu po praktyka 3 lat.',
  productTitle: '"Yin-yoga w 47 minut" — sekwencja prowadzona',
  price: 49,
  buyers: 128,
};

// =====================================================================
// ENHANCED POST CARD (with all integrations)
// =====================================================================
function EnhancedPostCard({ post, onOpenDetail, onAuthorClick }) {
  const a = AppData.getAuthor(post.authorId);
  const [liked, setLiked] = useState(false);
  const [saved, setSaved] = useState(false);
  const [translated, setTranslated] = useState(false);
  const [showAddTo, setShowAddTo] = useState(false);
  const isForeign = post.lang && post.lang !== 'pl';

  const ctx = (e) => openContextMenu(e, [
    { label:'Zapisz do biblioteki', icon:'Bookmark', onClick:()=>setShowAddTo(true) },
    { label:'Skopiuj link', icon:'Link', onClick:()=>window.__app.pushToast('ok','Skopiowano','Link do posta jest w schowku.') },
    { label:'Wycisz tego autora', icon:'Eye', onClick:()=>window.__app.pushToast('ok','Autor wyciszony','Posty od @'+a.handle+' zniknęły z feedu.') },
    { label:'Nieinteresujące', icon:'X', onClick:()=>window.__app.pushToast('ok','Zapamiętane','Pokażemy mniej takich postów.') },
    { label:'Zgłoś post', icon:'Shield', danger:true, onClick:()=>openReport('post', post.id, `Post od ${a.name}`) },
  ]);

  return (
    <div className="post" data-comment-anchor={`post-${post.id}`}>
      <div className="post-head">
        <div onClick={()=>onAuthorClick && onAuthorClick(a)} style={{cursor: onAuthorClick?'pointer':'default'}}>
          <Avatar author={a} size={40}/>
        </div>
        <div style={{flex:1, minWidth:0}}>
          <div className="row gap-4">
            <span className="post-author" style={{cursor: onAuthorClick?'pointer':'default'}} onClick={()=>onAuthorClick && onAuthorClick(a)}>{a.name}</span>
            {a.verified && <VerifiedBadge/>}
            <span style={{color:'var(--ink-4)'}}>·</span>
            <span className="post-meta">@{a.handle}</span>
          </div>
          <div className="row gap-8" style={{marginTop:2}}>
            <DomainChip domainId={post.domain} sub={post.sub}/>
            <span className="post-meta">· {post.time}</span>
            {isForeign && <span className="post-meta" style={{color:'var(--accent)'}}>· {post.lang.toUpperCase()}</span>}
          </div>
        </div>
        <button className="icon-btn" style={{width:30, height:30, border:'none', background:'transparent'}} onClick={ctx}>
          <I name="More" size={16}/>
        </button>
      </div>

      <div className="post-body" onClick={()=>onOpenDetail && onOpenDetail(post)} style={{cursor: onOpenDetail?'pointer':'default'}}>
        {(translated && post.translated || post.body).split('\n\n').map((p,i) => <p key={i} style={{margin:'0 0 10px 0'}}>{p}</p>)}
      </div>

      {isForeign && (
        <button onClick={()=>setTranslated(t=>!t)} style={{
          background:'transparent', border:'none', color:'var(--accent)', fontSize:12.5, fontWeight:500,
          padding:'4px 0', cursor:'pointer', textAlign:'left', marginBottom:8,
        }}>
          {translated ? '← Pokaż oryginał' : `🌐 Przetłumacz z ${post.lang.toUpperCase()}`}
        </button>
      )}

      {post.rec && (
        <div className="rec">
          <div className="rec-cover" style={{background: coverBg(post.rec.cover)}}/>
          <div className="rec-content">
            <span className="rec-source">{post.rec.type}</span>
            <span className="rec-title">{post.rec.title}</span>
            <span className="rec-author">{post.rec.author}</span>
            <button className="btn btn-soft btn-sm" style={{alignSelf:'flex-start', marginTop:6}} onClick={()=>setShowAddTo(true)}>Dodaj do biblioteki</button>
          </div>
        </div>
      )}

      <div className="post-actions">
        <button className={`post-action ${liked?'active':''}`} onClick={()=>setLiked(!liked)}>
          <I name="Heart" size={15}/> <span>{post.likes + (liked?1:0)}</span>
        </button>
        <button className="post-action" onClick={()=>onOpenDetail && onOpenDetail(post)}>
          <I name="Comment" size={15}/> <span>{post.comments}</span>
        </button>
        <button className={`post-action ${saved?'active':''}`} onClick={()=>{ setSaved(!saved); setShowAddTo(true); }}>
          <I name="Bookmark" size={15}/> Do biblioteki
        </button>
        <button className="post-action"><I name="Share" size={15}/></button>
      </div>

      {showAddTo && <AddToLibraryModal onClose={()=>setShowAddTo(false)}/>}
    </div>
  );
}

// =====================================================================
// SPONSORED POST CARD
// =====================================================================
function SponsoredPostCard({ post }) {
  return (
    <div className="post" style={{borderLeft:`3px solid ${post.brandHue}`}}>
      <div className="post-head">
        <div style={{width:40, height:40, borderRadius:'var(--r-2)', background:`linear-gradient(135deg, ${post.cover[0]}, ${post.cover[1]})`}}/>
        <div style={{flex:1}}>
          <div className="row gap-4">
            <span className="post-author">{post.brand}</span>
            <span style={{
              fontSize:9.5, fontWeight:700, letterSpacing:'0.06em',
              padding:'1px 6px', borderRadius:'var(--r-pill)',
              background:'var(--bg-soft)', color:'var(--ink-3)',
            }}>SPONSOROWANE</span>
          </div>
          <div className="post-meta" style={{marginTop:2}}>{post.meta}</div>
        </div>
        <button className="icon-btn" style={{width:30, height:30, border:'none', background:'transparent'}}
                onClick={(e)=>openContextMenu(e, [
                  { label:'Dlaczego widzę tę reklamę?', icon:'Eye', onClick:()=>window.__app.pushToast('ok','Powód','Twoje preferencje: Ciało, Joga · Łódź') },
                  { label:'Ukryj tę reklamę', icon:'X', onClick:()=>window.__app.pushToast('ok','Ukryto','Nie pokażemy tej reklamy ponownie.') },
                  { label:'Zgłoś reklamę', icon:'Shield', danger:true, onClick:()=>openReport('post', post.id, post.title) },
                ])}>
          <I name="More" size={16}/>
        </button>
      </div>
      <div style={{display:'grid', gridTemplateColumns:'1fr 200px', gap:14, alignItems:'center', marginBottom:12}}>
        <div>
          <div style={{fontFamily:'var(--font-serif)', fontSize:22, fontWeight:500, lineHeight:1.2, marginBottom:8}}>{post.title}</div>
          <div className="post-body" style={{margin:0}}>{post.body}</div>
        </div>
        <div style={{height:140, borderRadius:'var(--r-2)', background:`linear-gradient(135deg, ${post.cover[0]}, ${post.cover[1]})`}}/>
      </div>
      <button className="btn btn-primary" style={{width:'100%'}}>{post.cta}</button>
    </div>
  );
}

// =====================================================================
// LOCKED PRODUCT POST CARD
// =====================================================================
function LockedPostCard({ post }) {
  const a = AppData.getAuthor(post.authorId);
  const [unlocking, setUnlocking] = useState(false);
  const [unlocked, setUnlocked] = useState(false);
  return (
    <div className="post" style={{position:'relative'}}>
      <div className="post-head">
        <Avatar author={a} size={40}/>
        <div style={{flex:1}}>
          <div className="row gap-4">
            <span className="post-author">{a.name}</span>
            {a.verified && <VerifiedBadge/>}
          </div>
          <div className="row gap-8" style={{marginTop:2}}>
            <DomainChip domainId={post.domain} sub={post.sub}/>
            <span className="post-meta">· {post.time}</span>
          </div>
        </div>
      </div>
      <div className="post-body" style={{
        position:'relative',
        filter: unlocked ? 'none' : 'blur(4px)',
        userSelect: unlocked ? 'auto' : 'none',
        transition:'filter .3s',
      }}>
        {post.preview}
      </div>
      {!unlocked && (
        <div style={{
          marginTop:14, padding:18,
          borderRadius:'var(--r-2)',
          background:'linear-gradient(135deg, color-mix(in oklab, var(--hue-amber) 16%, var(--bg-elev)), var(--bg-elev))',
          border:'1px solid var(--line)',
          textAlign:'center',
        }}>
          <div style={{fontSize:32, marginBottom:6}}>🔒</div>
          <div style={{fontFamily:'var(--font-serif)', fontSize:18, fontWeight:500, marginBottom:4}}>{post.productTitle}</div>
          <div className="muted" style={{fontSize:12, marginBottom:14}}>{post.buyers} osób już kupiło</div>
          <button className="btn btn-primary" disabled={unlocking} style={{background:'#635bff'}}
                  onClick={()=>{
                    setUnlocking(true);
                    setTimeout(()=>{
                      setUnlocking(false); setUnlocked(true);
                      window.__app.pushToast('ok','Zakup potwierdzony',`Stripe · ${post.price} zł · Treść odblokowana`);
                    }, 900);
                  }}>
            {unlocking ? 'Łączę ze Stripe…' : `Odblokuj — ${post.price} zł`}
          </button>
          <div className="muted" style={{fontSize:10.5, marginTop:8}}>Płatność jednorazowa · Dostęp na zawsze</div>
        </div>
      )}
    </div>
  );
}

// =====================================================================
// ADD TO LIBRARY modal
// =====================================================================
function AddToLibraryModal({ onClose }) {
  const libs = [
    { name:'Do przeczytania', count:14, system:true },
    { name:'Ulubione', count:8, system:true },
    { name:'Święta geometria', count:5 },
    { name:'Joga rano', count:7 },
  ];
  const [pick, setPick] = useState(libs[0].name);
  const [creating, setCreating] = useState(false);
  const [newName, setNewName] = useState('');
  return (
    <Modal title="Dodaj do biblioteki" onClose={onClose} footer={
      <>
        <button className="btn btn-ghost" onClick={onClose}>Anuluj</button>
        <button className="btn btn-primary" onClick={()=>{ window.__app.pushToast('ok','Zapisano',`Dodano do "${creating?newName:pick}".`); onClose(); }}>Zapisz</button>
      </>
    }>
      {!creating ? <>
        <div className="col gap-6" style={{marginBottom:14}}>
          {libs.map(l => (
            <button key={l.name} onClick={()=>setPick(l.name)} className="row gap-12" style={{
              padding:'10px 12px', cursor:'pointer', textAlign:'left', borderRadius:'var(--r-2)',
              border: pick===l.name?'2px solid var(--ink-1)':'1px solid var(--line)',
              background: pick===l.name?'var(--bg-soft)':'var(--bg-elev)',
            }}>
              <I name="Library" size={16}/>
              <div style={{flex:1}}>
                <div style={{fontSize:13, fontWeight:600}}>{l.name}</div>
                <div className="muted" style={{fontSize:11}}>{l.count} pozycji {l.system?'· systemowa':''}</div>
              </div>
              {pick===l.name && <I name="Check" size={14}/>}
            </button>
          ))}
        </div>
        <button className="btn btn-ghost btn-sm" onClick={()=>setCreating(true)}>
          <I name="Plus" size={12}/> Utwórz nową bibliotekę
        </button>
      </> : <>
        <div className="form-group">
          <div className="form-label">Nazwa biblioteki</div>
          <input className="input" value={newName} onChange={e=>setNewName(e.target.value)} placeholder="np. Praktyki na wieczór" autoFocus/>
        </div>
        <div className="form-group">
          <div className="form-label">Prywatność</div>
          <div className="row gap-6">
            <button className="chip active">Prywatna</button>
            <button className="chip">Publiczna</button>
          </div>
        </div>
        <button className="btn btn-ghost btn-sm" onClick={()=>setCreating(false)}>← Wybierz istniejącą</button>
      </>}
    </Modal>
  );
}

// =====================================================================
// POST DETAIL — full thread with comments
// =====================================================================
function PostDetail({ post, onClose }) {
  const a = AppData.getAuthor(post.authorId);
  const [comments, setComments] = useState(FeedExtras.getComments(post.id));
  const [draft, setDraft] = useState('');
  const [replyingTo, setReplyingTo] = useState(null);
  const [liked, setLiked] = useState(false);

  const send = () => {
    if (!draft.trim()) return;
    if (replyingTo) {
      setComments(cs => cs.map(c => c.id === replyingTo ? { ...c, replies:[...c.replies, { id:'r-'+Date.now(), authorId:'me', time:'teraz', text: draft, likes:0 }] } : c));
    } else {
      setComments(cs => [{ id:'n-'+Date.now(), authorId:'me', time:'teraz', text: draft, likes:0, replies:[] }, ...cs]);
    }
    setDraft(''); setReplyingTo(null);
  };

  return (
    <div className="modal-overlay" onClick={onClose}>
      <div className="modal modal-wide" onClick={e=>e.stopPropagation()} style={{maxWidth:680, maxHeight:'90vh', display:'flex', flexDirection:'column'}}>
        <div className="modal-head">
          <h2 className="modal-title">Wątek</h2>
          <button className="icon-btn" style={{border:'none', background:'transparent'}} onClick={onClose}><I name="X" size={16}/></button>
        </div>
        <div className="modal-body" style={{flex:1, overflowY:'auto', display:'flex', flexDirection:'column', gap:0}}>
          {/* Original post */}
          <div className="post-head">
            <Avatar author={a} size={42}/>
            <div style={{flex:1}}>
              <div className="row gap-4">
                <span className="post-author">{a.name}</span>
                {a.verified && <VerifiedBadge/>}
              </div>
              <div className="row gap-8" style={{marginTop:2}}>
                <DomainChip domainId={post.domain} sub={post.sub}/>
                <span className="post-meta">· {post.time}</span>
              </div>
            </div>
          </div>
          <div className="post-body">
            {post.body.split('\n\n').map((p,i) => <p key={i} style={{margin:'0 0 10px 0'}}>{p}</p>)}
          </div>
          <div className="post-actions" style={{borderBottom:'1px solid var(--line-soft)', paddingBottom:14}}>
            <button className={`post-action ${liked?'active':''}`} onClick={()=>setLiked(!liked)}>
              <I name="Heart" size={15}/> <span>{post.likes + (liked?1:0)}</span>
            </button>
            <button className="post-action"><I name="Comment" size={15}/> <span>{comments.length}</span></button>
            <button className="post-action"><I name="Bookmark" size={15}/> Do biblioteki</button>
            <button className="post-action"><I name="Share" size={15}/></button>
          </div>

          {/* Comments */}
          <div className="col gap-12" style={{padding:'18px 0'}}>
            <div className="section-eyebrow">Komentarze ({comments.length})</div>
            {comments.map(c => <CommentItem key={c.id} c={c} onReply={()=>setReplyingTo(c.id)}/>)}
          </div>
        </div>
        {/* Reply box */}
        <div style={{padding:'12px 22px', borderTop:'1px solid var(--line)', background:'var(--bg-elev)'}}>
          {replyingTo && (
            <div className="row" style={{justifyContent:'space-between', marginBottom:6, fontSize:11.5, color:'var(--ink-3)'}}>
              <span>Odpowiadasz {AppData.getAuthor(comments.find(c=>c.id===replyingTo)?.authorId)?.name}</span>
              <button onClick={()=>setReplyingTo(null)} style={{background:'transparent', border:'none', color:'var(--accent)', cursor:'pointer', fontSize:11.5}}>Anuluj</button>
            </div>
          )}
          <div className="row gap-8">
            <Avatar author="me" size={32}/>
            <input className="input" style={{flex:1}} value={draft} onChange={e=>setDraft(e.target.value)} onKeyDown={e=>e.key==='Enter'&&send()} placeholder="Napisz komentarz…"/>
            <button className="btn btn-accent" onClick={send}><I name="Send" size={13}/></button>
          </div>
        </div>
      </div>
    </div>
  );
}

function CommentItem({ c, onReply, indent = 0 }) {
  const a = AppData.getAuthor(c.authorId);
  const [liked, setLiked] = useState(false);
  return (
    <div style={{display:'flex', gap:10, marginLeft: indent*36}}>
      <Avatar author={a} size={32}/>
      <div style={{flex:1}}>
        <div style={{background:'var(--bg-soft)', padding:'8px 12px', borderRadius:'var(--r-2)'}}>
          <div className="row gap-4" style={{marginBottom:2}}>
            <span style={{fontSize:13, fontWeight:600}}>{a.name}</span>
            {a.verified && <VerifiedBadge/>}
            <span className="muted" style={{fontSize:11}}>· {c.time}</span>
            <button className="icon-btn" style={{marginLeft:'auto', width:22, height:22, border:'none', background:'transparent'}}
                    onClick={(e)=>openContextMenu(e, [
                      { label:'Skopiuj', icon:'Link', onClick:()=>{} },
                      { label:'Zgłoś komentarz', icon:'Shield', danger:true, onClick:()=>openReport('comment', c.id, `Komentarz od ${a.name}`) },
                    ])}>
              <I name="More" size={12}/>
            </button>
          </div>
          <div style={{fontSize:13, lineHeight:1.5}}>{c.text}</div>
        </div>
        <div className="row gap-12" style={{padding:'4px 12px', fontSize:11, color:'var(--ink-3)'}}>
          <button onClick={()=>setLiked(!liked)} style={{background:'transparent', border:'none', cursor:'pointer', color: liked?'var(--accent)':'var(--ink-3)', fontWeight:500}}>
            ❤ {c.likes + (liked?1:0)}
          </button>
          {onReply && <button onClick={onReply} style={{background:'transparent', border:'none', cursor:'pointer', color:'var(--ink-3)', fontWeight:500}}>Odpowiedz</button>}
        </div>
        {c.replies && c.replies.map(r => <CommentItem key={r.id} c={r} indent={indent+1}/>)}
      </div>
    </div>
  );
}

// =====================================================================
// ENHANCED COMMUNITY SCREEN (v1 — superseded by screens-ff1.jsx v2)
// Kept here for reference; NOT exported to FF1.Community
// =====================================================================
const EnhancedCommunityScreen = function Community({ phase, onOpenComposer, onNav }) {
  const [tab, setTab] = useState('all');
  const [detail, setDetail] = useState(null);
  const [, setApp] = window.__app.use();
  const order = { FF1:1, FF2:2, FF3:3, GL:4 };
  const showSponsored = order[phase] >= 4;
  const showLocked = order[phase] >= 4;

  // Build feed mixing posts + sponsored + locked
  const feedItems = [];
  const posts = AppData.posts;
  posts.forEach((p, i) => {
    feedItems.push({ kind:'post', post: p });
    if (showSponsored && i === 1) feedItems.push({ kind:'sponsored', post: FeedExtras.sponsoredPost });
    if (showLocked && i === 2) feedItems.push({ kind:'locked', post: FeedExtras.lockedPost });
  });

  return (
    <div className="page" style={{maxWidth:1280}}>
      <div style={{display:'grid', gridTemplateColumns:'1fr 320px', gap:24, alignItems:'start'}}>
        <div>
          <PageHeader
            eyebrow="Społeczność"
            title="Feed"
            subtitle="Twoje wątki, Twoje tempo. Zero algorytmów, które kradną uwagę."
            ff={phase}
            action={
              <button className="btn btn-accent" onClick={onOpenComposer}>
                <I name="Plus" size={14}/> Nowy post
              </button>
            }
          />
          <div className="row gap-8 mb-16" style={{flexWrap:'wrap'}}>
            {[
              ['all','Wszystkie posty'],
              ['for-you','Dla Ciebie'],
              ['follow','Od obserwowanych'],
              ...(order[phase] >= 2 ? [['groups','Z grup które obserwuję']] : []),
            ].map(([k,l]) => (
              <button key={k} className={`chip ${tab===k?'active':''}`} onClick={()=>setTab(k)}>{l}</button>
            ))}
            <button className="chip" style={{marginLeft:'auto'}} onClick={()=>setApp({ feedConfigOpen: true })}>
              <I name="Sliders" size={13}/> Skonfiguruj feed
            </button>
          </div>
          <div className="card">
            {feedItems.map((it, i) => {
              if (it.kind === 'sponsored') return <SponsoredPostCard key={'s'+i} post={it.post}/>;
              if (it.kind === 'locked') return <LockedPostCard key={'l'+i} post={it.post}/>;
              return <EnhancedPostCard key={it.post.id} post={it.post} onOpenDetail={setDetail}/>;
            })}
          </div>
          <div className="row" style={{justifyContent:'center', padding:'24px'}}>
            <button className="btn btn-ghost">Wczytaj starsze</button>
          </div>
        </div>
        <RightRail/>
      </div>
      {detail && <PostDetail post={detail} onClose={()=>setDetail(null)}/>}
    </div>
  );
};

Object.assign(window, { EnhancedPostCard, SponsoredPostCard, LockedPostCard, AddToLibraryModal, PostDetail, CommentItem, FeedExtras });
