import Link from "next/link";
import { formatPrice } from "../../lib/format";
import type { ShippingSettings } from "../../lib/payload";

// Single source of truth for both the full /versand page and the cart's
// quick-reference VersandModal — same section ids/titles/copy either way,
// so the two can never drift apart. `withAnchors` adds scroll-margin (for
// the full page's TOC) — the modal doesn't need it, it just scrolls its
// own dialog body.
export const VERSAND_SECTION_IDS = [
  { id: "lieferzeiten", title: "Lieferzeiten" },
  { id: "versandkosten", title: "Versandkosten" },
  { id: "liefergebiet", title: "Liefergebiet" },
  { id: "versanddienstleister", title: "Versanddienstleister" },
  { id: "transportrisiko", title: "Transportrisiko" },
  { id: "widerruf", title: "Rückgabe & Widerruf" },
] as const;

function Section({
  id,
  title,
  withAnchor,
  children,
}: {
  id: string;
  title: string;
  withAnchor: boolean;
  children: React.ReactNode;
}) {
  return (
    <div
      id={id}
      className={"flex flex-col gap-3 items-start w-full" + (withAnchor ? " scroll-mt-32" : "")}
    >
      <p
        className="font-semibold text-h-small text-text-primary"
        style={{ fontFamily: "var(--font-lora)" }}
      >
        {title}
      </p>
      <div className="flex flex-col gap-2 items-start text-body text-text-body w-full">
        {children}
      </div>
    </div>
  );
}

export function VersandSections({
  withAnchors = false,
  shipping,
  shippingCost,
  freeShippingThreshold,
}: {
  withAnchors?: boolean;
  shipping: ShippingSettings;
  /** Price of the default (first active, i.e. Standard) ShippingMethod —
   * same value/estimate CartContent.tsx already computes for its own
   * order-summary line, threaded down here instead of this component
   * having its own hardcoded lib/shipping.ts constant, which is exactly
   * what let this text drift from the real Payload ShippingMethods price
   * (see lib/shipping.ts's own comment on this). */
  shippingCost: number;
  /** Lowest freeShippingThreshold among active ShippingMethods, or null if
   * none has one — same rule CartContent.tsx/getTrustBadges() already use. */
  freeShippingThreshold: number | null;
}) {
  return (
    <div className="flex flex-col gap-10 items-start w-full">
      <Section id="lieferzeiten" title="Lieferzeiten" withAnchor={withAnchors}>
        <p>
          Nach Zahlungseingang bereiten wir deine Bestellung in der Regel innerhalb von{" "}
          {shipping.handlingDays.min}–{shipping.handlingDays.max} Werktagen zum Versand vor. Die
          Versanddauer innerhalb Deutschlands beträgt anschließend zusätzlich{" "}
          {shipping.transitDays.min}–{shipping.transitDays.max} Werktage.
        </p>
        <p>
          Damit ist deine Bestellung in der Regel nach {shipping.totalDays.min}–
          {shipping.totalDays.max} Werktagen bei dir, sofern auf der jeweiligen Produktseite nichts
          anderes angegeben ist. Als Werktage gelten Montag bis Freitag, ausgenommen gesetzliche
          Feiertage.
        </p>
      </Section>

      <Section id="versandkosten" title="Versandkosten" withAnchor={withAnchors}>
        <p>
          Die Versandkosten innerhalb Deutschlands betragen pauschal {formatPrice(shippingCost)}{" "}
          pro Bestellung.
          {freeShippingThreshold !== null && ` Ab einem Bestellwert von ${formatPrice(freeShippingThreshold)} versenden wir kostenlos.`}
        </p>
        <p>Alle angegebenen Preise verstehen sich inklusive der gesetzlichen Mehrwertsteuer.</p>
        <p>
          Einzelne Produkte können von den oben genannten Versandkosten ausgenommen sein (z.B.
          digitale Produkte) — das ist dann direkt auf der jeweiligen Produktseite vermerkt.
        </p>
      </Section>

      <Section id="liefergebiet" title="Liefergebiet" withAnchor={withAnchors}>
        <p>
          Aktuell versenden wir ausschließlich innerhalb Deutschlands. Eine Lieferung ins Ausland
          ist derzeit nicht möglich.
        </p>
      </Section>

      <Section id="versanddienstleister" title="Versanddienstleister" withAnchor={withAnchors}>
        <p>
          Der Versand erfolgt über DHL. Sobald deine Bestellung das Lager verlässt, erhältst du
          eine E-Mail mit der Sendungsverfolgung.
        </p>
      </Section>

      <Section id="transportrisiko" title="Transportrisiko" withAnchor={withAnchors}>
        <p>
          Bestellst du als Verbraucher:in, trägt das Transportrisiko bei Beschädigung oder Verlust
          während des Versands grundsätzlich einfach produktiv. — nicht du.
        </p>
      </Section>

      <Section id="widerruf" title="Rückgabe & Widerruf" withAnchor={withAnchors}>
        <p>
          Informationen zu Rückgabe, Rücksendekosten und deinem gesetzlichen Widerrufsrecht findest
          du in unserer{" "}
          <Link href="/widerruf" target="_blank" rel="noopener noreferrer" className="text-brand hover:underline">
            Widerrufsbelehrung
          </Link>
          .
        </p>
      </Section>
    </div>
  );
}
