/* Contactpagina: formulier, directe contactgegevens en bevestiging.
   Teksten uit het contentdocument (v4.0, pagina 8). Bij KVK-nummer staat bewust
   "Op aanvraag": Buiten Buddies is een buurtinitiatief zonder inschrijving. */

function ContactChannel({ icon, label, value, href, note, external, ariaLabel }) {
  return (
    <a className="bb-cc__ch" href={href} target={external ? "_blank" : undefined} rel={external ? "noopener noreferrer" : undefined} aria-label={ariaLabel}>
      <span className="bb-cc__chicon" aria-hidden="true"><Icon name={icon} size={22} /></span>
      <span className="bb-cc__chlabel">{label}</span>
      <span className="bb-cc__chvalue">{value}</span>
      {note && <span className="bb-cc__chnote">{note}</span>}
    </a>
  );
}

function ContactThanks({ go, onNew, newsletter }) {
  const ref = useRef(null);
  const bel = bbBellink();
  useEffect(() => {
    if (!ref.current) return;
    const reduce = window.matchMedia("(prefers-reduced-motion: reduce)").matches
      || document.documentElement.classList.contains("bb-rm-force");
    const kaart = ref.current.closest(".bb-cc__formwrap, .bb-form-card") || ref.current;
    const header = document.querySelector(".bb-header");
    const hoogte = header ? header.getBoundingClientRect().height : 72;
    const top = kaart.getBoundingClientRect().top + window.scrollY - hoogte - 15;
    window.scrollTo({ top: Math.max(0, top), behavior: reduce ? "auto" : "smooth" });
  }, []);
  return (
    <div className="bb-thanks bb-cc__thanks" role="status" ref={ref} data-screen-label="Bedankt voor je bericht">
      <ConfettiRain />
      <span className="bb-thanks__mark" aria-hidden="true"><Icon name="check" size={34} stroke={2.6} /></span>
      <h2>Bedankt voor je bericht!</h2>
      <p>Sabrina neemt zo snel mogelijk contact op.</p>
      <ol className="bb-cc__next">
        <li><span aria-hidden="true">1.</span><span className="t">Je bericht komt rechtstreeks bij Sabrina terecht, niet bij een servicedesk.</span></li>
        <li><span aria-hidden="true">2.</span><span className="t">Heb je haast? Bel of stuur een WhatsApp naar <a href={bel.href} target={bel.extern ? "_blank" : undefined} rel={bel.extern ? "noopener noreferrer" : undefined} aria-label={bel.label}>06 18 39 15 32</a>.</span></li>
        <li><span aria-hidden="true">3.</span><span className="t">Wil je alvast verder lezen? Bij de veelgestelde vragen staan de meeste antwoorden.</span></li>
      </ol>
      {newsletter && (
        <div className="bb-thanks__news">
          <span aria-hidden="true"><Icon name="mail" size={20} /></span>
          <p>
            Leuk dat je ook updates per e‑mail wil ontvangen. We houden je graag op de hoogte van de
            aankomende activiteiten van Buiten Buddies voor jouw kind in de buurt, maximaal één keer
            per maand.
          </p>
        </div>
      )}
      <div className="bb-thanks__cta">
        <Button variant="primary" onClick={() => go("faq")}>Naar de veelgestelde vragen <Icon name="arrowRight" /></Button>
        <Button variant="secondary" onClick={onNew}>Nog een bericht sturen</Button>
      </div>
    </div>
  );
}

function ContactForm({ go, onStatus }) {
  const [v, setV] = useState({ voornaam: "", tussenvoegsel: "", achternaam: "", email: "", bericht: "", updates: false });
  const [errors, setErrors] = useState({});
  const [status, setStatus] = useState("idle");
  const summaryRef = useRef(null);

  const validate = (val) => {
    const e = {};
    const vn = val.voornaam.trim();
    if (!vn) e.voornaam = "Vul je voornaam in.";
    else if (!bbIsVoornaam(vn)) e.voornaam = BB_VOORNAAM_FOUT;
    if (!val.achternaam.trim()) e.achternaam = "Vul je achternaam in.";
    if (!val.email.trim()) e.email = "Vul je e‑mailadres in.";
    else if (!bbIsEmail(val.email)) e.email = "Vul een geldig e‑mailadres in, bijvoorbeeld naam@voorbeeld.nl.";
    if (!val.bericht.trim()) e.bericht = "Schrijf je bericht.";
    else if (val.bericht.trim().length < 10) e.bericht = "Schrijf iets meer, zodat Sabrina je goed kan helpen.";
    return e;
  };

  const set = (k) => (val) => {
    setV((p) => Object.assign({}, p, { [k]: val }));
    if (errors[k]) setErrors((p) => { const n = Object.assign({}, p); delete n[k]; return n; });
  };
  const blur = (k) => () => {
    const e = validate(v);
    setErrors((p) => {
      const n = Object.assign({}, p);
      if (e[k]) n[k] = e[k]; else delete n[k];
      return n;
    });
  };

  const send = async () => {
    setStatus("sending");
    try {
      await bbSubmitForm("contact", v);
      setStatus("sent");
      if (onStatus) onStatus(true);
      if (window.bbGaEvent) window.bbGaEvent("formulier_verzonden", { formulier: "contact", nieuwsbrief: !!v.updates });
    }
    catch (err) { setStatus("senderror"); }
  };

  const onSubmit = (e) => {
    e.preventDefault();
    const errs = validate(v);
    setErrors(errs);
    if (Object.keys(errs).length) {
      requestAnimationFrame(() => { if (summaryRef.current) summaryRef.current.focus(); });
      return;
    }
    send();
  };

  if (status === "sent") {
    return (
      <ContactThanks
        go={go}
        newsletter={v.updates}
        onNew={() => { setV({ voornaam: "", tussenvoegsel: "", achternaam: "", email: "", bericht: "", updates: false }); setStatus("idle"); if (onStatus) onStatus(false); }}
      />
    );
  }

  return (
    <form className="bb-form bb-cc__form" onSubmit={onSubmit} noValidate>
      <ErrorSummary errors={errors} summaryRef={summaryRef} order={["voornaam", "achternaam", "email", "bericht"]} />

      <div className="bb-form__row bb-form__row--name">
        <Field id="voornaam" label="Voornaam" error={errors.voornaam} required>
          <TextInput id="voornaam" value={v.voornaam} onChange={set("voornaam")} onBlur={blur("voornaam")} error={errors.voornaam} autoComplete="given-name" />
        </Field>
        <Field id="tussenvoegsel" label="Tussenvoegsel" hideOpt>
          <TextInput id="tussenvoegsel" value={v.tussenvoegsel} onChange={set("tussenvoegsel")} autoComplete="additional-name" />
        </Field>
        <Field id="achternaam" label="Achternaam" error={errors.achternaam} required>
          <TextInput id="achternaam" value={v.achternaam} onChange={set("achternaam")} onBlur={blur("achternaam")} error={errors.achternaam} autoComplete="family-name" />
        </Field>
      </div>

      <Field id="email" label="E‑mailadres" error={errors.email} required>
        <TextInput id="email" type="email" value={v.email} onChange={set("email")} onBlur={blur("email")} error={errors.email} autoComplete="email" placeholder="naam@voorbeeld.nl" />
      </Field>

      <Field id="bericht" label="Bericht" error={errors.bericht} hint="Vertel kort waar het over gaat. Bijvoorbeeld een vraag over aanmelden, een idee voor je buurt of een samenwerking." required>
        <textarea
          id="bericht" name="bericht" rows="7"
          className={"bb-input bb-textarea" + (errors.bericht ? " has-error" : "")}
          value={v.bericht}
          onChange={(e) => set("bericht")(e.target.value)}
          onBlur={blur("bericht")}
          aria-invalid={errors.bericht ? "true" : undefined}
          aria-describedby={["bericht-hint", errors.bericht ? "bericht-error" : null].filter(Boolean).join(" ")}
        ></textarea>
      </Field>

      <div className="bb-checks bb-cc__opt">
        <CheckRow id="updates" checked={v.updates} onChange={set("updates")} hint="Buiten Buddies verstuurt maximaal 1 nieuwsbrief per maand, vaak minder dan dat. Uitschrijven is altijd vanuit iedere nieuwsbrief mogelijk.">
          Ik ontvang graag updates over Buiten Buddies per e‑mail
        </CheckRow>
      </div>

      {status === "senderror" && <SendError onRetry={send} />}

      <div className="bb-form__foot">
        <Button variant="yellow" type="submit" disabled={status === "sending"}>
          {status === "sending" ? "Versturen\u2026" : "Verstuur bericht"} <Icon name="arrowRight" />
        </Button>
        <p className="bb-form__note">Velden met een <span className="bb-field__req">*</span> zijn verplicht.</p>
      </div>

      <p className="bb-cc__privacy">
        <Icon name="shield" size={17} />
        <span>
          Je gegevens worden alleen gebruikt om je bericht te beantwoorden en niet gedeeld met derden.{" "}
          <a href={window.bbHref("privacybeleid")} onClick={(e) => { e.preventDefault(); go("privacybeleid"); }}>Lees ons privacybeleid</a>.
        </span>
      </p>
    </form>
  );
}

function ContactPage({ go }) {
  const [verzonden, setVerzonden] = useState(false);
  const bel = bbBellink();
  return (
    <main id="main" tabIndex="-1" className="bb-ccpage" data-screen-label="Contact">
      <header className="bb-cc__head">
        <Container>
          <div className="bb-cc__headgrid">
            <div>
              <FadeUp><h1>Contact</h1></FadeUp>
              <FadeUp delay={90}>
                <p className="bb-cc__lead">
                  Een vraag over aanmelden, een idee voor je eigen buurt of gewoon even sparren?
                  Je bericht komt rechtstreeks bij Sabrina terecht.
                </p>
              </FadeUp>
              <FadeUp delay={160}>
                <div className="bb-cc__channels">
                  <ContactChannel icon="mail" label="E‑mail" value="info@buitenbuddies.org" href="mailto:info@buitenbuddies.org" note="Meestal binnen een paar dagen antwoord" />
                  <ContactChannel icon="phone" label="Telefoon en WhatsApp" value="06 18 39 15 32" href={bel.href} external={bel.extern} ariaLabel={bel.label} note="Bellen mag, een bericht sturen ook" />
                </div>
              </FadeUp>
            </div>

            <FadeUp delay={220} className="bb-cc__person">
              <img className="bb-cc__portrait" src="assets/photos/sabrina-straat-ijshockey-web.jpg" loading="eager" decoding="sync" alt="Sabrina Costermans in de straat, met kinderen die op de achtergrond straathockey spelen." />
              <div className="bb-cc__personbody">
                <p className="bb-cc__personname">Sabrina Costermans</p>
                <p className="bb-cc__personrole">initiatiefnemer Buiten Buddies</p>
                <p className="bb-cc__personline">„Ik lees en beantwoord de berichten zelf. Je krijgt dus antwoord van een mens, niet van een systeem."</p>
              </div>
            </FadeUp>
          </div>
        </Container>
      </header>

      <div className="bb-cc">
        <Container>
          <div className="bb-cc__grid">
            <section
              className="bb-cc__formwrap"
              aria-labelledby={verzonden ? null : "cc-form-title"}
              aria-label={verzonden ? "Bericht verstuurd" : null}
            >
              {!verzonden && (
                <>
                  <h2 id="cc-form-title">Stuur een bericht</h2>
                  <p className="bb-cc__formintro">Vul het formulier in, dan komt je bericht bij Sabrina terecht.</p>
                </>
              )}
              <ContactForm go={go} onStatus={setVerzonden} />
            </section>

            <aside className="bb-cc__side" aria-label="Gegevens en achtergrond">
              <section className="bb-cc__card">
                <h3>Gegevens</h3>
                <dl className="bb-cc__dl">
                  <div>
                    <dt>E‑mail</dt>
                    <dd><a href="mailto:info@buitenbuddies.org">info@buitenbuddies.org</a></dd>
                  </div>
                  <div>
                    <dt>Telefoon</dt>
                    <dd><a href={bel.href} target={bel.extern ? "_blank" : undefined} rel={bel.extern ? "noopener noreferrer" : undefined} aria-label={bel.label}>06 18 39 15 32</a></dd>
                  </div>
                  <div>
                    <dt>Postadres</dt>
                    <dd>Kamerlingh Onnesstraat 12<br />2014 EL Haarlem</dd>
                  </div>
                  <div>
                    <dt>KVK-nummer</dt>
                    <dd>Op aanvraag</dd>
                  </div>
                  <div>
                    <dt>Werkgebied</dt>
                    <dd>Haarlem, buurt voor buurt</dd>
                  </div>
                </dl>
                <div className="bb-cc__socials">
                  {BB_SOCIALS.map((s) => (
                    <a key={s.key} href={s.url} target="_blank" rel="noopener noreferrer">
                      <span className="bb-cc__socialicon"><SocialGlyph name={s.key} size={20} /></span>
                      <span className="bb-cc__sociallabel">{s.handle} op <span className="bb-cc__socialnb">{s.label} <Icon name="externalLink" size={16} /></span></span>
                    </a>
                  ))}
                </div>
              </section>

              <section className="bb-cc__card bb-cc__card--trust">
                <h3>Goed om te weten</h3>
                <ul className="bb-cc__trust">
                  <li><span className="i" aria-hidden="true"><Icon name="check" size={16} /></span><span className="t">Deelname aan Buiten Buddies is gratis.</span></li>
                  <li><span className="i" aria-hidden="true"><Icon name="check" size={16} /></span><span className="t">Elke buurtapp wordt begeleid door minimaal twee volwassenen uit de buurt.</span></li>
                  <li><span className="i" aria-hidden="true"><Icon name="check" size={16} /></span><span className="t">Telefoonnummers worden alleen gebruikt voor buitenspeelafspraken.</span></li>
                  <li><span className="i" aria-hidden="true"><Icon name="check" size={16} /></span><span className="t">Subsidie Noord aan Zet, 1.233 stemmen uit Haarlem-Noord.</span></li>
                </ul>
                <div className="bb-cc__partner">
                  <a className="bb-logolink" href="https://haarlem.nl/" target="_blank" rel="noopener noreferrer" aria-label="Naar de website van de gemeente Haarlem, opent in een nieuw tabblad">
                    <img src="assets/logo/gemeente-haarlem.png" alt="Gemeente Haarlem" />
                  </a>
                  <p>Mogelijk gemaakt met steun van Gemeente Haarlem.</p>
                </div>
              </section>

              <section className="bb-cc__card bb-cc__card--faq">
                <h3>Staat je vraag er al tussen?</h3>
                <p>Dertien vragen van ouders en groepsbeheerders zijn al beantwoord.</p>
                <Button variant="secondary" onClick={() => go("faq")}>Naar de veelgestelde vragen</Button>
              </section>
            </aside>
          </div>
        </Container>
      </div>
    </main>
  );
}

Object.assign(window, { ContactPage, ContactForm, ContactThanks, ContactChannel });
