// Price Rules section — exchange-rate triggered pricing (killer feature)
// Big hero block because this is the differentiator.

const SectionWrap = window.SectionWrap;
const SectionHead = window.SectionHead;
const GridBG = window.GridBG;
const Eyebrow = window.Eyebrow;

const { useState, useEffect, useRef } = React;

// Format helpers
const fmtDecimal = (n) => n.toFixed(2);
const fmtInteger = (n) => Math.round(n).toLocaleString('tr-TR').replace(/\./g, '\u202F'); // narrow no-break space

// Live ticker chip — USD / EUR / Gold. Simulates a live market feed with
// mean-reverting random walk (pulls toward weekAvg so the value stays plausible)
// plus a brief up/down flash on the number whenever it ticks.
const TickerChip = ({ label, start, weekAvg, color, fmt = 'decimal', jitter = 0.08 }) => {
  const [current, setCurrent] = useState(start);
  const [flash, setFlash] = useState(null); // 'up' | 'down' | null
  const prevRef = useRef(start);

  useEffect(() => {
    let flashTimeout;
    const tick = () => {
      const prev = prevRef.current;
      // Mean-reversion: gentle pull toward weekAvg so values stay near real-world range
      const pull = (weekAvg - prev) * 0.03;
      // Symmetric random noise
      const noise = (Math.random() - 0.5) * 2 * jitter;
      const next = Math.max(0, prev + pull + noise);
      setCurrent(next);
      if (Math.abs(next - prev) > jitter * 0.05) {
        setFlash(next > prev ? 'up' : 'down');
        clearTimeout(flashTimeout);
        flashTimeout = setTimeout(() => setFlash(null), 480);
      }
      prevRef.current = next;
    };
    // Stagger so all 3 tickers don't tick in unison
    const offset = Math.random() * 1500;
    const startTimer = setTimeout(() => {
      tick();
      const iv = setInterval(tick, 1700 + Math.random() * 1100);
      startTimer._iv = iv;
    }, offset);
    return () => {
      clearTimeout(startTimer);
      clearTimeout(flashTimeout);
      if (startTimer._iv) clearInterval(startTimer._iv);
    };
  }, []);

  const delta = ((current - weekAvg) / weekAvg) * 100;
  const up = delta >= 0;
  const format = fmt === 'integer' ? fmtInteger : fmtDecimal;
  const valueColor = flash === 'up' ? '#34d399' : flash === 'down' ? '#f87171' : '#e5e1e4';

  return (
    <div style={{
      background:'linear-gradient(180deg, rgba(28,28,32,0.9), rgba(20,20,24,0.75))',
      border:`1px solid ${color}22`, borderRadius:12, padding:'12px 14px',
      display:'flex',flexDirection:'column',gap:6,minWidth:0,overflow:'hidden'
    }}>
      <div style={{display:'flex',alignItems:'center',justifyContent:'space-between',gap:6}}>
        <div style={{fontFamily:'Space Grotesk',fontSize:10,color:'#a98a7d',letterSpacing:'0.12em',textTransform:'uppercase',fontWeight:700,whiteSpace:'nowrap'}}>{label}</div>
        <span style={{width:6,height:6,borderRadius:9999,background:color,boxShadow:`0 0 6px ${color}`,animation:'sp-pulse 1.4s ease-in-out infinite',flexShrink:0}} />
      </div>
      {/* Value — full width; Delta below it so it never wraps/overlaps on narrow chips */}
      <div style={{
        fontFamily:'Manrope',fontSize:22,fontWeight:800,color:valueColor,
        letterSpacing:'-0.03em',fontVariantNumeric:'tabular-nums',
        transition:'color 0.45s ease',lineHeight:1.05,
      }}>{format(current)}</div>
      <div style={{
        fontSize:11,fontWeight:700,color:up?'#34d399':'#f87171',
        fontFamily:'JetBrains Mono',transition:'color 0.3s ease',
        display:'flex',alignItems:'center',gap:3,
      }}>
        <span style={{fontSize:10}}>{up?'▲':'▼'}</span>
        <span>{Math.abs(delta).toFixed(2)}%</span>
      </div>
      <div style={{fontSize:9,color:'#6b655f',fontFamily:'JetBrains Mono',letterSpacing:'0.05em',whiteSpace:'nowrap',overflow:'hidden',textOverflow:'ellipsis'}}>7g ort · {format(weekAvg)}</div>
    </div>
  );
};

// A visual rule row: IF ... THEN ...
const RuleRow = ({ cond, action, active=true }) => (
  <div style={{
    display:'flex',alignItems:'center',gap:12,padding:'12px 14px',
    background: active ? 'rgba(93,230,255,0.05)' : 'rgba(255,255,255,0.02)',
    border:`1px solid ${active ? 'rgba(93,230,255,0.15)' : 'rgba(255,255,255,0.05)'}`,
    borderRadius:10
  }}>
    <span style={{
      fontSize:9,padding:'3px 8px',borderRadius:6,fontFamily:'JetBrains Mono',
      letterSpacing:'0.1em',textTransform:'uppercase',fontWeight:800,
      background: active ? 'rgba(52,211,153,0.15)' : 'rgba(255,255,255,0.05)',
      color: active ? '#34d399' : '#6b655f'
    }}>{active ? 'aktif' : 'pasif'}</span>
    <span style={{fontFamily:'JetBrains Mono',fontSize:12,color:'#9ccaff'}}>IF</span>
    <span style={{fontSize:13,color:'#e5e1e4'}}>{cond}</span>
    <span style={{fontFamily:'JetBrains Mono',fontSize:12,color:'#FF8C33'}}>→</span>
    <span style={{fontSize:13,color:'#cfc4bf'}}>{action}</span>
  </div>
);

// Fallback values if /api/rates fetch fails (realistic 2026-Q2 TR market)
const FALLBACK_RATES = {
  usd:  { start: 44.85, avg: 44.70 },
  eur:  { start: 52.82, avg: 52.50 },
  gold: { start: 6966,  avg: 6893 },
};

const PriceRulesSection = () => {
  const [rates, setRates] = useState(FALLBACK_RATES);
  const [loaded, setLoaded] = useState(false);
  const [isMobile, setIsMobile] = useState(
    typeof window !== 'undefined' && window.innerWidth < 768
  );

  useEffect(() => {
    const onResize = () => setIsMobile(window.innerWidth < 768);
    window.addEventListener('resize', onResize);
    return () => window.removeEventListener('resize', onResize);
  }, []);

  useEffect(() => {
    // One-shot fetch on landing load — seeds the tickers with real current rates.
    // After seeding, the random-walk simulation inside TickerChip takes over
    // (landing page, no polling — see project_claude_design_landing).
    let cancelled = false;
    fetch('/api/rates', { cache: 'no-store' })
      .then(r => r.ok ? r.json() : Promise.reject(r.status))
      .then(data => {
        if (cancelled) return;
        const r = data?.rates || {};
        const a = data?.avg7 || {};
        const next = {
          usd:  { start: r.usd?.sell  ?? FALLBACK_RATES.usd.start,  avg: a.usd  || FALLBACK_RATES.usd.avg  },
          eur:  { start: r.eur?.sell  ?? FALLBACK_RATES.eur.start,  avg: a.eur  || FALLBACK_RATES.eur.avg  },
          gold: { start: r.gold?.sell ?? FALLBACK_RATES.gold.start, avg: a.gold || FALLBACK_RATES.gold.avg },
        };
        setRates(next);
        setLoaded(true);
      })
      .catch(() => { /* keep fallback values */ });
    return () => { cancelled = true; };
  }, []);

  // Scale jitter proportionally to each pair so movement feels natural at any price level
  const jitterUsd  = rates.usd.start  * 0.0018;  // ~0.08 TL on 44.85
  const jitterEur  = rates.eur.start  * 0.0014;  // ~0.07 TL on 52.82
  const jitterGold = rates.gold.start * 0.0012;  // ~8 TL on 6966

  // key ensures TickerChip re-mounts with fresh state once real rates land
  const k = loaded ? 'live' : 'fallback';

  return (
  <SectionWrap id="price-rules" label="04 Price Rules" padY={isMobile ? 80 : 160} accent="#FF6B00">
    <div style={{maxWidth:1280,margin:'0 auto',padding: isMobile ? '0 16px' : '0 32px'}}>
      <SectionHead
        eyebrow="döviz tetikli fiyatlandırma"
        eyebrowColor="#FF8C33"
        title="Dolar oynadığında,"
        titleAccent="fiyatlarınız da oynasın"
        lede="USD, EUR ve altın kurlarını canlı takip edin. Kendi kurallarınızı yazın. %1 artınca, 50 TL aşınca veya haftalık ortalamanın üstüne çıkınca sistem sizi uyarır. Onaylayın, gönderin, tamamdır."
      />

      <div style={{
        marginTop: isMobile ? 40 : 72,
        display:'grid',
        gridTemplateColumns: isMobile ? '1fr' : '1.1fr 1fr',
        gap: isMobile ? 16 : 32,
        alignItems:'stretch'
      }}>
        {/* LEFT: Live tickers + rule editor */}
        <div style={{display:'flex',flexDirection:'column',gap: isMobile ? 14 : 20,minWidth:0}}>
          <div style={{display:'grid',gridTemplateColumns:'repeat(3, minmax(0, 1fr))',gap: isMobile ? 8 : 12}}>
            <TickerChip key={`usd-${k}`} label="USD/TRY" start={rates.usd.start}  weekAvg={rates.usd.avg}  color="#34d399" jitter={jitterUsd}  />
            <TickerChip key={`eur-${k}`} label="EUR/TRY" start={rates.eur.start}  weekAvg={rates.eur.avg}  color="#5de6ff" jitter={jitterEur}  />
            <TickerChip key={`xau-${k}`} label="XAU/TRY" start={rates.gold.start} weekAvg={rates.gold.avg} color="#FFC857" jitter={jitterGold} fmt="integer" />
          </div>

          <div style={{
            padding:22,borderRadius:16,
            background:'linear-gradient(180deg, rgba(28,28,32,0.85), rgba(20,20,24,0.6))',
            border:'1px solid rgba(255,255,255,0.06)'
          }}>
            <div style={{display:'flex',alignItems:'center',justifyContent:'space-between',marginBottom:14}}>
              <div style={{fontFamily:'Space Grotesk',fontSize:13,fontWeight:800,color:'#e5e1e4',letterSpacing:'-0.02em'}}>Kural Editörü</div>
              <div style={{fontSize:10,fontFamily:'JetBrains Mono',color:'#6b655f',letterSpacing:'0.1em',textTransform:'uppercase'}}>4 kural · tümü aktif</div>
            </div>
            <div style={{display:'flex',flexDirection:'column',gap:8}}>
              <RuleRow cond="USD %1 artarsa" action="Elektronik kategorisi +%0.8 zam" />
              <RuleRow cond="USD 50₺ aşarsa" action="Tüm ithal ürünlere revize bildirimi" />
              <RuleRow cond="XAU haftalık ort. üstündeyse" action="Takı kategorisi +%1.2 zam" />
              <RuleRow cond="EUR -%0.5 düşerse" action="Avrupa menşeli ürünlere indirim" active={false} />
            </div>
            <button style={{
              marginTop:16,width:'100%',padding:'10px 14px',borderRadius:10,
              background:'rgba(255,107,0,0.08)',border:'1px dashed rgba(255,107,0,0.35)',
              color:'#FF8C33',fontSize:12,fontWeight:700,fontFamily:'Space Grotesk',
              letterSpacing:'0.05em',cursor:'pointer'
            }}>+ yeni kural ekle</button>
          </div>
        </div>

        {/* RIGHT: Telegram trigger flow */}
        <div style={{
          padding:22,borderRadius:16,
          background:'linear-gradient(180deg, rgba(40,32,24,0.6), rgba(20,20,24,0.6))',
          border:'1px solid rgba(255,107,0,0.15)',
          position:'relative',overflow:'hidden'
        }}>
          <div aria-hidden style={{position:'absolute',inset:0,background:'radial-gradient(ellipse 60% 40% at 50% 0%, rgba(255,107,0,0.12), transparent 60%)'}} />
          <div style={{position:'relative'}}>
            <div style={{display:'flex',alignItems:'center',gap:8,marginBottom:16}}>
              <div style={{width:28,height:28,borderRadius:8,background:'linear-gradient(135deg,#229ED9,#2AABEE)',display:'flex',alignItems:'center',justifyContent:'center',fontSize:14,color:'#fff',fontWeight:900}}>✈</div>
              <div>
                <div style={{fontFamily:'Space Grotesk',fontSize:13,fontWeight:800,color:'#e5e1e4'}}>Telegram · ShopPanel Bot</div>
                <div style={{fontSize:10,color:'#6b655f',fontFamily:'JetBrains Mono'}}>canlı · az önce</div>
              </div>
            </div>

            <div style={{display:'flex',flexDirection:'column',gap:10}}>
              <div style={{padding:'10px 12px',background:'rgba(34,158,217,0.12)',borderRadius:10,borderTopLeftRadius:2,fontSize:13,color:'#cfe7f5',lineHeight:1.45}}>
                ⚠️ <b>USD tetiklendi</b>: 33.82 → 34.28 (+%1.36)<br/>
                <span style={{color:'#9ccaff'}}>27 ürün etkileniyor. Onaylıyor musun?</span>
              </div>
              <div style={{display:'flex',gap:8,flexWrap:'wrap'}}>
                <button style={{padding:'8px 14px',borderRadius:9,background:'#34d399',color:'#0e0e10',border:'none',fontWeight:800,fontSize:12,cursor:'pointer',fontFamily:'Inter'}}>✓ Tümünü onayla</button>
                <button style={{padding:'8px 14px',borderRadius:9,background:'rgba(255,255,255,0.06)',color:'#e5e1e4',border:'1px solid rgba(255,255,255,0.1)',fontWeight:600,fontSize:12,cursor:'pointer',fontFamily:'Inter'}}>Ürünleri seç</button>
                <button style={{padding:'8px 14px',borderRadius:9,background:'rgba(255,255,255,0.03)',color:'#a98a7d',border:'1px solid rgba(255,255,255,0.06)',fontWeight:600,fontSize:12,cursor:'pointer',fontFamily:'Inter'}}>Ertele</button>
              </div>
              <div style={{padding:'10px 12px',background:'rgba(52,211,153,0.1)',borderRadius:10,borderTopRightRadius:2,fontSize:13,color:'#c7f0dc',lineHeight:1.45,marginLeft:40}}>
                ✓ <b>27 ürün güncellendi.</b><br/>
                <span style={{color:'#9ccaff',fontFamily:'JetBrains Mono',fontSize:11}}>Trendyol · 14 · Shopify · 8 · Hepsiburada · 5</span>
              </div>
            </div>

            <div style={{marginTop:16,paddingTop:14,borderTop:'1px solid rgba(255,255,255,0.06)'}}>
              <div style={{fontSize:10,fontFamily:'JetBrains Mono',color:'#6b655f',letterSpacing:'0.15em',textTransform:'uppercase',marginBottom:8}}>veya tam otomatik</div>
              <label style={{display:'flex',alignItems:'center',gap:10,cursor:'pointer'}}>
                <span style={{width:36,height:20,background:'#FF6B00',borderRadius:9999,position:'relative',flexShrink:0,boxShadow:'0 0 12px rgba(255,107,0,0.4)'}}>
                  <span style={{position:'absolute',top:2,right:2,width:16,height:16,borderRadius:9999,background:'#fff'}} />
                </span>
                <span style={{fontSize:13,color:'#e5e1e4'}}>Hiç sormadan uygula</span>
              </label>
            </div>
          </div>
        </div>
      </div>

      {/* Distribution channels strip */}
      <div style={{marginTop:40,padding:'20px 24px',borderRadius:14,background:'rgba(19,19,21,0.6)',border:'1px solid rgba(255,255,255,0.05)',display:'flex',alignItems:'center',gap:24,flexWrap:'wrap',justifyContent:'space-between'}}>
        <div style={{fontSize:12,fontFamily:'JetBrains Mono',color:'#7a7570',letterSpacing:'0.15em',textTransform:'uppercase'}}>Bildirim kanalları</div>
        <div style={{display:'flex',gap:18,flexWrap:'wrap'}}>
          {['Telegram','WhatsApp','Push','E-posta','SMS','Slack'].map(c => (
            <div key={c} style={{display:'flex',alignItems:'center',gap:6,fontSize:13,color:'#cfc4bf'}}>
              <span style={{width:5,height:5,borderRadius:9999,background:'#5de6ff'}} />{c}
            </div>
          ))}
        </div>
      </div>
    </div>
  </SectionWrap>
  );
};

window.PriceRulesSection = PriceRulesSection;
