// Silk and Blow — Footer (locations + newsletter + nav)
function Footer({ locations, onBook, onNav, columns }) {
  const [form, setForm] = React.useState({ firstName: '', email: '' });
  const [touched, setTouched] = React.useState({});
  const [state, setState] = React.useState('idle'); // idle | sending | sent | error
  const [error, setError] = React.useState('');
  const { guard, HoneypotField } = useFormGuard();
  const set = (k) => (e) => setForm((f) => ({ ...f, [k]: e.target.value }));

  const fieldErrors = {
    firstName: form.firstName.trim() ? '' : 'Please add your first name.',
    email: validEmail(form.email) ? '' : 'Please add a valid email address.',
  };
  const invalid = Object.values(fieldErrors).some(Boolean);

  const submit = async (e) => {
    e.preventDefault();
    if (state === 'sending') return;
    setTouched({ firstName: true, email: true });
    if (invalid) return;
    setState('sending'); setError('');
    try {
      await postLead('/api/subscribe', { firstName: form.firstName.trim(), email: form.email.trim(), tags: ['website-lead', 'newsletter'], ...guard() });
      setState('sent');
    } catch (err) { setError(err.message); setState('error'); }
  };

  return (
    <footer id="footer" className="bleed" style={{ background: 'var(--off-white)', borderTop: '1px solid var(--border-hair)' }}>
      {/* locations band */}
      <div className="section wrap" style={{ paddingBottom: 'clamp(48px,6vw,80px)' }}>
        <div className="reveal" style={{ display: 'flex', alignItems: 'center', gap: 14, marginBottom: 36 }}>
          <span className="gold-tick" /><span className="gold-eyebrow">Find your chair · Metro Atlanta</span>
        </div>
        <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(260px,1fr))', gap: 18 }}>
          {locations.map((l, i) => (
            <div key={l.id} className="reveal lift" data-d={(i % 3) + 1} style={{ background: '#fff', border: '1px solid var(--border-hair)', overflow: 'hidden', display: 'flex', flexDirection: 'column' }}>
              <div className="tile" style={{ height: 158 }}><img src={l.image} alt={l.city} /></div>
              <div style={{ padding: '20px 22px 22px', flex: 1, display: 'flex', flexDirection: 'column' }}>
                <h3 style={{ fontFamily: 'var(--font-display)', fontSize: 22, color: 'var(--slate)', margin: 0 }}>{l.city}</h3>
                <p style={{ fontFamily: 'var(--font-display)', fontSize: 14, color: 'var(--slate-70)', lineHeight: 1.5, margin: '8px 0 0' }}>{l.address}</p>
                <p style={{ fontFamily: 'var(--font-ui)', fontSize: 11.5, letterSpacing: '0.06em', color: 'var(--slate-45)', margin: '10px 0 0', display: 'flex', alignItems: 'center', gap: 7 }}><Icon name="clock" size={13} /> {l.hours}</p>
                <div style={{ display: 'flex', gap: 16, marginTop: 18, paddingTop: 16, borderTop: '1px solid var(--border-hair)' }}>
                  {l.cta
                    ? <button className="linkline" onClick={l.cta.fn}>{l.cta.label} <Icon name="arrowRight" size={14} className="arr" /></button>
                    : <button className="linkline" onClick={onBook}>Book <Icon name="arrowRight" size={14} className="arr" /></button>}
                  <button className="linkline" style={{ color: 'var(--slate-45)' }} onClick={() => window.open('https://maps.google.com/?q=' + encodeURIComponent(l.address + ', ' + l.city + ', GA'), '_blank')}>Directions</button>
                </div>
              </div>
            </div>
          ))}
        </div>
      </div>

      {/* newsletter strip */}
      <div className="bleed" style={{ background: 'var(--grad-champagne)', borderTop: '1px solid rgba(194,163,94,.28)', borderBottom: '1px solid rgba(194,163,94,.28)' }}>
        <div className="wrap" style={{ display: 'flex', flexWrap: 'wrap', alignItems: 'center', justifyContent: 'space-between', gap: 28, paddingBlock: 'clamp(40px,5vw,64px)' }}>
          <div style={{ maxWidth: 460 }}>
            <h3 className="display" style={{ fontSize: 'clamp(26px,3vw,40px)' }}>Silk, in your inbox</h3>
            <p className="lead" style={{ marginTop: 10 }}>Seasonal offers, new locations, and hair-care notes from the chair. No spam, promise.</p>
          </div>
          {state === 'sent' ? (
            <div style={{ flex: '1 1 380px', maxWidth: 460 }}>
              <p style={{ display: 'flex', alignItems: 'center', gap: 10, fontFamily: 'var(--font-display)', fontSize: 'clamp(18px,2vw,22px)', color: 'var(--slate)', margin: 0 }}>
                <Icon name="check" size={20} /> You&rsquo;re on the list.
              </p>
              <p className="lead" style={{ marginTop: 8 }}>Look out for a note from us soon. Nothing but the good stuff.</p>
            </div>
          ) : (
          <form onSubmit={submit} className="news-form" noValidate>
            <HoneypotField id="nl-company" />
            <div>
              <input value={form.firstName} onChange={set('firstName')} onBlur={() => setTouched((t) => ({ ...t, firstName: true }))} type="text" placeholder="First name" autoComplete="given-name" aria-label="First name" aria-invalid={!!(touched.firstName && fieldErrors.firstName)} className="news-input" />
              {touched.firstName && fieldErrors.firstName && <p className="news-err">{fieldErrors.firstName}</p>}
            </div>
            <div>
              <input value={form.email} onChange={set('email')} onBlur={() => setTouched((t) => ({ ...t, email: true }))} type="email" placeholder="you@email.com" autoComplete="email" aria-label="Email address" aria-invalid={!!(touched.email && fieldErrors.email)} className="news-input" />
              {touched.email && fieldErrors.email && <p className="news-err">{fieldErrors.email}</p>}
            </div>
            <button className="btn btn--full" type="submit" disabled={state === 'sending'} style={{ opacity: state === 'sending' ? 0.65 : 1 }}>
              {state === 'sending' ? 'Sending…' : 'Subscribe'}
            </button>
            {state === 'error' && <p role="alert" className="news-err">{error}</p>}
          </form>
          )}
        </div>
      </div>

      {/* bottom bar */}
      <div className="wrap" style={{ paddingBlock: 48 }}>
        <div style={{ display: 'grid', gridTemplateColumns: 'minmax(0,1.4fr) repeat(2, minmax(0,1fr))', gap: 40, marginBottom: 44 }} className="foot-cols">
          <div>
            <img src="/assets/images/logo-primary.png" alt="Silk and Blow" style={{ height: 46, marginBottom: 18 }} />
            <p style={{ fontFamily: 'var(--font-display)', fontSize: 14.5, color: 'var(--slate-70)', lineHeight: 1.55, maxWidth: 320 }}>Walk-in silk press &amp; blow out bar for textured hair. Come as you are. Leave silked out.</p>
            <div style={{ display: 'flex', gap: 10, marginTop: 20 }}>
              {['icon-instagram', 'icon-tiktok'].map((ic) => (
                <a key={ic} href="#" onClick={(e) => e.preventDefault()} className="iconbtn" style={{ borderColor: 'var(--slate-12)' }} aria-label="social">
                  <img src={'/assets/images/' + ic + '.png'} alt="" style={{ width: 18, height: 18, objectFit: 'contain' }} />
                </a>
              ))}
            </div>
          </div>
          {(columns || [
            { h: 'Visit', items: [['Reserve your chair', () => onBook()], ['Services', () => onNav('services')], ['Press Club', () => onNav('membership')], ['Salon Suites', () => { window.location.href = window.SUITES_HREF; }], ['Locations', () => onNav('footer')]] },
            { h: 'Salon', items: [['Our founder', () => onNav('founder')], ['Reviews', () => onNav('proof')], ['Contact', () => onNav('footer')]] },
          ]).map((col) => (
            <div key={col.h}>
              <h4 style={{ fontFamily: 'var(--font-ui)', fontSize: 11.5, fontWeight: 600, letterSpacing: '0.16em', textTransform: 'uppercase', color: 'var(--gold-deep)', margin: '0 0 18px' }}>{col.h}</h4>
              <ul style={{ listStyle: 'none', margin: 0, padding: 0, display: 'flex', flexDirection: 'column', gap: 13 }}>
                {col.items.map(([label, fn]) => (
                  <li key={label}><button onClick={fn || undefined} style={{ background: 'none', border: 0, padding: 0, cursor: fn ? 'pointer' : 'default', fontFamily: 'var(--font-display)', fontSize: 15, color: 'var(--slate-70)' }} className="foot-link">{label}</button></li>
                ))}
              </ul>
            </div>
          ))}
        </div>
        <div className="gold-rule" style={{ marginBottom: 24 }} />
        <div style={{ display: 'flex', flexWrap: 'wrap', justifyContent: 'space-between', gap: 12, fontFamily: 'var(--font-ui)', fontSize: 12, color: 'var(--slate-45)', letterSpacing: '0.04em' }}>
          <span>© {new Date().getFullYear()} Silk and Blow. All rights reserved.</span>
          <span style={{ display: 'flex', gap: 22 }}>
            <span>Privacy</span><span>Terms</span><span>Accessibility</span>
          </span>
        </div>
      </div>
    </footer>
  );
}

Object.assign(window, { Footer });
