// App entry — composes everything and wires Tweaks panel.

const TWEAK_DEFAULS = /*EDITMODE-BEGIN*/{
  "accent": "none",
  "accentCustom": "#4F6651",
  "useCustomAccent": false,
  "heroVariant": "split",
  "ctaLabel": "Book a demo",
  "secondaryCtaLabel": "Hear a sample call",
  "brandName": "Samika",
  "showMarquee": true,
  "marqueeSpeed": 38,
  "showTrust": true,
  "showHowItWorks": true,
  "showSpecialty": true,
  "showRoi": true,
  "showDemo": true,
  "showComparison": true,
  "showMetrics": true,
  "showIntegrations": true,
  "showTestimonial": true,
  "showFaq": true,
  "showLeadForm": true,
  "headingFont": "sans",
  "displayScale": 100,
  "bodyScale": 100,
  "bgTone": "warm-cream",
  "navStyle": "floating-pill",
  "containerWidth": 1320,
  "sectionPadding": 120,
  "buttonShape": "pill",
  "showApprovalDot": true,
  "approvalDotColor": "#7CC7A1"
}/*EDITMODE-END*/;

function MarqueeStrip({ speed }) {
  const items = [
    "100% inbound calls answered",
    "24/7 — no menus, no hold",
    "Doctor-approved bookings",
    "HIPAA · BAA · audit trail",
    "Writes to your PMS",
    "Live in 7–14 days",
  ];
  return (
    <div className="marquee">
      <div className="marquee__track" style={{animationDuration: `${speed}s`}}>
        {[...items, ...items].map((t, i) => <span key={i}>{t}</span>)}
      </div>
    </div>
  );
}

const BG_TONES = {
  "warm-cream": "linear-gradient(180deg, #F7F1E4 0%, #F0E7D2 38%, #E6D9BC 100%)",
  "cool-paper": "linear-gradient(180deg, #F2F4F1 0%, #E7ECE5 38%, #D9E1D6 100%)",
  "neutral-fog": "linear-gradient(180deg, #F4F2EE 0%, #EBE7E0 38%, #DDD6CB 100%)",
  "ink":        "linear-gradient(180deg, #161412 0%, #1F1D1A 100%)",
  "flat-paper": "#FAF6EC",
};

function App() {
  const [tweaks, setTweaks] = useTweaks(TWEAK_DEFAULS);

  // Apply tokens via CSS custom properties on <html>
  React.useEffect(() => {
    const root = document.documentElement;
    root.setAttribute("data-accent", tweaks.accent);

    // Custom accent override
    const accentMap = { none: "#1F1D1A", green: "#4F6651", teal: "#3B6364", terracotta: "#B5754D" };
    const activeAccent = tweaks.useCustomAccent ? tweaks.accentCustom : accentMap[tweaks.accent];
    root.style.setProperty("--accent-active", activeAccent);

    // Background tone
    document.body.style.background = BG_TONES[tweaks.bgTone] || BG_TONES["warm-cream"];
    document.body.style.backgroundAttachment = "fixed";
    document.body.style.color = tweaks.bgTone === "ink" ? "#F7F1E4" : "";

    // Type scale
    root.style.setProperty("--display-scale", tweaks.displayScale / 100);
    root.style.setProperty("--body-scale", tweaks.bodyScale / 100);

    // Heading font
    const headingMap = {
      sans: 'var(--font-sans)',
      serif: 'var(--font-display)',
      mono: 'var(--font-mono)',
    };
    root.style.setProperty("--font-heading", headingMap[tweaks.headingFont]);

    // Container + padding
    root.style.setProperty("--container", tweaks.containerWidth + "px");
    root.style.setProperty("--section-pad", tweaks.sectionPadding + "px");

    // Button shape
    const radiusMap = { pill: "999px", rounded: "10px", square: "2px" };
    root.style.setProperty("--btn-radius", radiusMap[tweaks.buttonShape]);

    // Approval dot
    root.style.setProperty("--dot-color", tweaks.showApprovalDot ? tweaks.approvalDotColor : "transparent");
  }, [tweaks]);

  return (
    <div>
      {tweaks.showMarquee && <MarqueeStrip speed={tweaks.marqueeSpeed} />}
      <Nav brandName={tweaks.brandName} navStyle={tweaks.navStyle} ctaLabel={tweaks.ctaLabel} />
      <Hero
        heroVariant={tweaks.heroVariant}
        ctaLabel={tweaks.ctaLabel}
        secondaryCtaLabel={tweaks.secondaryCtaLabel}
        brandName={tweaks.brandName}
      />
      {tweaks.showRoi && <ROI />}
      {tweaks.showTrust && <TrustStrip />}
      {tweaks.showHowItWorks && <HowItWorks />}
      {tweaks.showSpecialty && <SpecialtyValue />}
      {tweaks.showDemo && <VoiceDemo />}
      {tweaks.showComparison && <Comparison />}
      {tweaks.showMetrics && <Metrics />}
      {tweaks.showIntegrations && <Integrations />}
      {tweaks.showTestimonial && <Testimonial />}
      {tweaks.showFaq && <FAQ />}
      {tweaks.showLeadForm && <LeadForm />}
      <Footer brandName={tweaks.brandName} />

      <TweaksPanel title="Tweaks">
        <TweakSection label="Brand">
          <TweakText label="Brand name" value={tweaks.brandName}
            onChange={v => setTweaks({brandName: v})} />
          <TweakRadio label="Heading font" value={tweaks.headingFont}
            onChange={v => setTweaks({headingFont: v})}
            options={[
              {label:"Sans", value:"sans"},
              {label:"Serif", value:"serif"},
              {label:"Mono", value:"mono"},
            ]} />
        </TweakSection>

        <TweakSection label="Color">
          <TweakRadio label="Background tone" value={tweaks.bgTone}
            onChange={v => setTweaks({bgTone: v})}
            options={[
              {label:"Cream", value:"warm-cream"},
              {label:"Paper", value:"flat-paper"},
              {label:"Cool", value:"cool-paper"},
              {label:"Fog", value:"neutral-fog"},
              {label:"Ink", value:"ink"},
            ]} />
          <TweakRadio label="Accent" value={tweaks.accent}
            onChange={v => setTweaks({accent: v, useCustomAccent: false})}
            options={[
              {label:"None", value:"none"},
              {label:"Forest", value:"green"},
              {label:"Teal", value:"teal"},
              {label:"Clay", value:"terracotta"},
            ]} />
          <TweakToggle label="Use custom accent" value={tweaks.useCustomAccent}
            onChange={v => setTweaks({useCustomAccent: v})} />
          {tweaks.useCustomAccent && (
            <TweakColor label="Custom accent" value={tweaks.accentCustom}
              onChange={v => setTweaks({accentCustom: v})} />
          )}
          <TweakToggle label="Show status dot" value={tweaks.showApprovalDot}
            onChange={v => setTweaks({showApprovalDot: v})} />
          {tweaks.showApprovalDot && (
            <TweakColor label="Status dot color" value={tweaks.approvalDotColor}
              onChange={v => setTweaks({approvalDotColor: v})} />
          )}
        </TweakSection>

        <TweakSection label="Type scale">
          <TweakSlider label="Display size" value={tweaks.displayScale}
            min={70} max={140} step={5} unit="%"
            onChange={v => setTweaks({displayScale: v})} />
          <TweakSlider label="Body size" value={tweaks.bodyScale}
            min={85} max={120} step={5} unit="%"
            onChange={v => setTweaks({bodyScale: v})} />
        </TweakSection>

        <TweakSection label="Layout">
          <TweakSlider label="Container width" value={tweaks.containerWidth}
            min={1080} max={1560} step={20} unit="px"
            onChange={v => setTweaks({containerWidth: v})} />
          <TweakSlider label="Section padding" value={tweaks.sectionPadding}
            min={60} max={200} step={10} unit="px"
            onChange={v => setTweaks({sectionPadding: v})} />
          <TweakRadio label="Button shape" value={tweaks.buttonShape}
            onChange={v => setTweaks({buttonShape: v})}
            options={[
              {label:"Pill", value:"pill"},
              {label:"Round", value:"rounded"},
              {label:"Square", value:"square"},
            ]} />
        </TweakSection>

        <TweakSection label="Hero">
          <TweakRadio label="Hero layout" value={tweaks.heroVariant}
            onChange={v => setTweaks({heroVariant: v})}
            options={[
              {label:"Split", value:"split"},
              {label:"Centered", value:"centered"},
            ]} />
          <TweakSelect label="Primary CTA" value={tweaks.ctaLabel}
            onChange={v => setTweaks({ctaLabel: v})}
            options={["Book a demo","See it in action","Get early access","Talk to our team","Calculate revenue lift"]} />
          <TweakText label="Secondary CTA" value={tweaks.secondaryCtaLabel}
            onChange={v => setTweaks({secondaryCtaLabel: v})} />
        </TweakSection>

        <TweakSection label="Nav">
          <TweakRadio label="Style" value={tweaks.navStyle}
            onChange={v => setTweaks({navStyle: v})}
            options={[
              {label:"Pill", value:"floating-pill"},
              {label:"Bar", value:"flat-bar"},
              {label:"Min", value:"minimal"},
            ]} />
        </TweakSection>

        <TweakSection label="Top strip">
          <TweakToggle label="Show marquee" value={tweaks.showMarquee}
            onChange={v => setTweaks({showMarquee: v})} />
          {tweaks.showMarquee && (
            <TweakSlider label="Scroll speed" value={tweaks.marqueeSpeed}
              min={15} max={80} step={1} unit="s"
              onChange={v => setTweaks({marqueeSpeed: v})} />
          )}
        </TweakSection>

        <TweakSection label="Sections">
          <TweakToggle label="Trust strip" value={tweaks.showTrust}
            onChange={v => setTweaks({showTrust: v})} />
          <TweakToggle label="How it works" value={tweaks.showHowItWorks}
            onChange={v => setTweaks({showHowItWorks: v})} />
          <TweakToggle label="Specialty" value={tweaks.showSpecialty}
            onChange={v => setTweaks({showSpecialty: v})} />
          <TweakToggle label="ROI calculator" value={tweaks.showRoi}
            onChange={v => setTweaks({showRoi: v})} />
          <TweakToggle label="Voice demo" value={tweaks.showDemo}
            onChange={v => setTweaks({showDemo: v})} />
          <TweakToggle label="Comparison" value={tweaks.showComparison}
            onChange={v => setTweaks({showComparison: v})} />
          <TweakToggle label="Metrics" value={tweaks.showMetrics}
            onChange={v => setTweaks({showMetrics: v})} />
          <TweakToggle label="Integrations" value={tweaks.showIntegrations}
            onChange={v => setTweaks({showIntegrations: v})} />
          <TweakToggle label="Testimonial" value={tweaks.showTestimonial}
            onChange={v => setTweaks({showTestimonial: v})} />
          <TweakToggle label="FAQ" value={tweaks.showFaq}
            onChange={v => setTweaks({showFaq: v})} />
          <TweakToggle label="Lead form" value={tweaks.showLeadForm}
            onChange={v => setTweaks({showLeadForm: v})} />
        </TweakSection>
      </TweaksPanel>
    </div>
  );
}

ReactDOM.createRoot(document.getElementById("root")).render(<App />);
