/* =========== Portfolio (fetches from CMS + seed data) =========== */
function Portfolio(){
  const t = useT();
  const [filter, setFilter] = useState('all');
  const [items, setItems] = useState(SITE.portfolioSeed);
  useDocumentMeta({
    title: t('Portfolio · trouwverhalen','Portfolio · wedding stories'),
    description: t('Onze recente trouwverhalen: foto, video en photobooth voor koppels in heel België. Bekijk gerealiseerde huwelijken en cinematische highlights.','Our recent wedding stories: photo, video and photobooth for couples across Belgium. Browse real weddings and cinematic highlights.'),
    image: SITE.portfolioSeed[0]?.img,
  });

  useEffect(()=>{
    fetch('/api/portfolio').then(r=>r.json()).then(data=>{
      if(!Array.isArray(data)) return;
      if(data.length > 0){
        // CMS has items (including auto-imported seeds) — use those ordered by position
        setItems(data);
      } else {
        // CMS empty — use seed as fallback
        setItems(SITE.portfolioSeed);
      }
    }).catch(()=>{});
  },[]);

  const filtered =
    filter === 'all' ? items
    : filter === 'foto+video' ? items.filter(w=> (w.cat||'') === 'foto+video')
    : items.filter(w=> (w.cat||'').includes(filter));

  return (
    <Page label="03 Portfolio">
      <Nav current="/portfolio" solid/>

      <section style={{paddingTop:160, paddingBottom:60}}>
        <div className="wrap">
          <div className="reveal">
            <div className="h-number">PORTFOLIO</div>
            <h1 className="h-display" style={{fontSize:'clamp(44px,6vw,88px)', marginTop:40, lineHeight:.88}}>
              {t(<>Trouwdagen,<br/><span className="italic-serif">stuk voor stuk</span><br/>uniek.</>,
                 <>Wedding days,<br/><span className="italic-serif">each and every one</span><br/>unique.</>)}
            </h1>
          </div>

          <div className="reveal" style={{marginTop:60, display:'flex', justifyContent:'space-between', alignItems:'end', flexWrap:'wrap', gap:20, borderBottom:'1px solid var(--ink)', paddingBottom:20}}>
            <div style={{display:'flex', gap:32, flexWrap:'wrap'}}>
              {[
                ['all',t('Alles','All')],
                ['foto',t('Fotografie','Photography')],
                ['video',t('Videografie','Videography')],
                ['foto+video',t('Combinatie','Combination')],
              ].map(([k,l])=>(
                <button key={k} onClick={()=>setFilter(k)} data-cursor="hover"
                  style={{fontSize:12, letterSpacing:'.25em', textTransform:'uppercase', color: filter===k?'var(--ink)':'var(--ink-40)', padding:'4px 0', borderBottom: filter===k?'1px solid var(--ink)':'1px solid transparent'}}>
                  {l}
                </button>
              ))}
            </div>
            <div style={{fontSize:11, letterSpacing:'.22em', textTransform:'uppercase', color:'var(--ink-60)'}}>
              {t('Toont '+filtered.length+' verhalen','Showing '+filtered.length+' stories')}
            </div>
          </div>
        </div>
      </section>

      <section style={{paddingBottom:120}}>
        <div className="wrap">
          <div className="masonry-grid reveal-stagger">
            {filtered.map((w,i)=>{
              // Label op basis van de ingestelde categorie (foto, video, foto + video)
              const catLabelNl = (w.cat||'foto+video').replace('+',' + ');
              const catLabel = window.WV_LANG==='en'
                ? catLabelNl.replace('foto','photo').replace('video','video')
                : catLabelNl;
              return (
                <Link key={w.slug||w.id||i} to={'/portfolio/'+(w.slug||'')} className="portfolio-card" data-cursor="view">
                  <div className="img">
                    <img src={w.img} alt={w.couple + (w.place ? ' · ' + w.place : '') + ' — trouwfotografie Wedding Visions'} loading="lazy"/>
                  </div>
                  <div className="portfolio-card__overlay"/>
                  <div className="portfolio-card__type">{catLabel}</div>
                  <div className="portfolio-card__meta">
                    <div className="h-display" style={{fontSize:26, lineHeight:1}}>{w.couple}</div>
                    <div style={{fontSize:11, letterSpacing:'.22em', textTransform:'uppercase', marginTop:8, opacity:.85}}>
                      {w.place} · {w.date}
                    </div>
                  </div>
                </Link>
              );
            })}
          </div>
        </div>
      </section>

      <section style={{background:'var(--cocoa)', color:'var(--ivory)', padding:'140px 0'}}>
        <div className="wrap" style={{textAlign:'center'}}>
          <div className="reveal">
            <div className="h-number" style={{color:'rgba(255,255,255,.5)'}}>{t('BENT U HET VOLGENDE VERHAAL?','ARE YOU THE NEXT STORY?')}</div>
            <h2 className="h-display" style={{fontSize:'clamp(40px,5.5vw,76px)', marginTop:24, lineHeight:.9}}>
              {t(<>Laat ons úw <br/><span className="italic-serif">verhaal</span> vertellen.</>,
                 <>Let us tell <br/>your <span className="italic-serif">story</span>.</>)}
            </h2>
            <div style={{marginTop:60}}>
              <Link to="/contact" className="btn btn-ghost-light" data-cursor="hover">
                {t('Plan een vrijblijvend gesprek','Book a no-obligation call')} <span className="arrow"></span>
              </Link>
            </div>
          </div>
        </div>
      </section>

      <Footer/>

      <style>{`
        .masonry-grid{
          display:grid;
          grid-template-columns:repeat(12, 1fr);
          grid-auto-rows:60px;
          gap:20px;
        }
        .portfolio-card{position:relative; overflow:hidden; display:block}
        .portfolio-card .img{width:100%; height:100%; aspect-ratio:auto}
        .portfolio-card .img img{width:100%; height:100%; object-fit:cover; transition:transform .9s cubic-bezier(.2,.8,.2,1)}
        .portfolio-card:hover .img img{transform:scale(1.04)}
        .portfolio-card__overlay{
          position:absolute; inset:0;
          background:linear-gradient(180deg, rgba(20,18,16,.25) 0%, transparent 30%, transparent 60%, rgba(20,18,16,.75));
          opacity:0;
          transition:opacity .5s;
          z-index:1;
          pointer-events:none;
        }
        .portfolio-card:hover .portfolio-card__overlay{opacity:1}
        .portfolio-card__type{
          position:absolute;
          top:16px; left:16px;
          z-index:3;
          font-size:10px;
          letter-spacing:.28em;
          text-transform:uppercase;
          color:#fff;
          padding:6px 12px;
          border:1px solid rgba(255,255,255,.55);
          border-radius:999px;
          background:rgba(20,18,16,.35);
          backdrop-filter:blur(6px);
          -webkit-backdrop-filter:blur(6px);
          pointer-events:none;
          opacity:.9;
          transition:opacity .35s;
        }
        .portfolio-card:hover .portfolio-card__type{opacity:1}
        .portfolio-card__meta{
          position:absolute;
          left:24px; bottom:24px; right:24px;
          color:var(--ivory); z-index:2;
          opacity:0; transform:translateY(8px);
          transition:opacity .5s, transform .5s;
          pointer-events:none;
        }
        .portfolio-card:hover .portfolio-card__meta{opacity:1; transform:translateY(0)}

        /* Three alternating patterns over an 18-item cycle.
           Each "visual band" sums to exactly 12 cols so rows are always full. */

        /* === Block A: hero left (7) + 2 stacked right (5+5) | 3 equal bottom (4+4+4) === */
        .portfolio-card:nth-child(18n+1){grid-column:span 7; grid-row:span 10}
        .portfolio-card:nth-child(18n+2){grid-column:span 5; grid-row:span 6}
        .portfolio-card:nth-child(18n+3){grid-column:span 5; grid-row:span 4}
        .portfolio-card:nth-child(18n+4){grid-column:span 4; grid-row:span 7}
        .portfolio-card:nth-child(18n+5){grid-column:span 4; grid-row:span 7}
        .portfolio-card:nth-child(18n+6){grid-column:span 4; grid-row:span 7}

        /* === Block B: 3 equal top (4+4+4) | 2 wide mid (6+6) | 1 full-width bottom (12) === */
        .portfolio-card:nth-child(18n+7){grid-column:span 4; grid-row:span 6}
        .portfolio-card:nth-child(18n+8){grid-column:span 4; grid-row:span 6}
        .portfolio-card:nth-child(18n+9){grid-column:span 4; grid-row:span 6}
        .portfolio-card:nth-child(18n+10){grid-column:span 6; grid-row:span 7}
        .portfolio-card:nth-child(18n+11){grid-column:span 6; grid-row:span 7}
        .portfolio-card:nth-child(18n+12){grid-column:span 12; grid-row:span 5}

        /* === Block C: alternating widths in 3 rows of 2 (5+7, 7+5, 4+8) === */
        .portfolio-card:nth-child(18n+13){grid-column:span 5; grid-row:span 7}
        .portfolio-card:nth-child(18n+14){grid-column:span 7; grid-row:span 7}
        .portfolio-card:nth-child(18n+15){grid-column:span 7; grid-row:span 6}
        .portfolio-card:nth-child(18n+16){grid-column:span 5; grid-row:span 6}
        .portfolio-card:nth-child(18n+17){grid-column:span 4; grid-row:span 6}
        .portfolio-card:nth-child(18n+18){grid-column:span 8; grid-row:span 6}

        @media (max-width:1024px){
          .masonry-grid{gap:16px}
          .portfolio-card__meta{left:18px; right:18px; bottom:18px}
        }
        @media (max-width:900px){
          .masonry-grid{
            grid-template-columns:1fr 1fr;
            grid-auto-rows:auto;
            gap:16px;
          }
          .masonry-grid > *,
          .portfolio-card:nth-child(n){
            grid-column:span 1 !important;
            grid-row:auto !important;
            aspect-ratio:4/5;
          }
          .portfolio-card__type{top:10px; left:10px; font-size:9px; padding:5px 10px}
          .portfolio-card__meta{left:16px; right:16px; bottom:16px}
          .portfolio-card__meta .h-display{font-size:20px !important}
        }
        /* Liggende telefoon: houd het raster luchtig zonder te grote tegels */
        @media (max-width:900px) and (orientation:landscape) and (max-height:520px){
          .masonry-grid{grid-template-columns:1fr 1fr 1fr; gap:12px}
          .masonry-grid > *,
          .portfolio-card:nth-child(n){aspect-ratio:3/4}
          .portfolio-card__meta .h-display{font-size:16px !important}
        }
        @media (max-width:600px){
          .masonry-grid{grid-template-columns:1fr; gap:14px}
        }
      `}</style>
    </Page>
  );
}

Object.assign(window, { Portfolio });
