import type { StorefrontRouterConfig, StorefrontProductUrlMode } from "@orderlyshop/web-components";

interface ExampleStorefrontRouterOptions {
  productUrlMode: StorefrontProductUrlMode;
}

export function exampleStorefrontRouter(_options: ExampleStorefrontRouterOptions): StorefrontRouterConfig {
  return {
    staticRoutes: [
      {
        path: "/forretningsbetingelser.html",
        title: "Forretningsbetingelser | Orderly Example Shop",
        description: "Her finder du betingelser for køb, levering, betaling, retur og reklamation.",
        create: createTermsPage
      }
    ],
    pageFactories: {
      home: createHomePage,
      category: createCategoryPage,
      product: createProductPage,
      checkout: createCheckoutPage,
      paymentSuccess: createPaymentSuccessPage,
      paymentFailure: createPaymentFailurePage
    }
  };
}

function createHomePage(): HTMLElement {
  const page = document.createElement("orderly-home-page");
  page.setAttribute("eyebrow", "Nye fund i alle afdelinger");
  page.setAttribute("title", "Find næste favorit");
  page.setAttribute("rail-cta-label", "Se alle");
  page.setAttribute("empty-label", "Der blev ikke fundet varer.");
  page.setAttribute("checkout-label", "Gå til betaling");
  page.append(utilityStrip());
  return page;
}

function createCategoryPage(): HTMLElement {
  const page = document.createElement("orderly-category-page");
  page.append(utilityStrip());
  return page;
}

function createProductPage(): HTMLElement {
  const page = document.createElement("orderly-product-detail-page");
  page.setAttribute("add-label", "Læg i kurven");
  page.setAttribute("loading-label", "Indlæser produkt...");
  page.setAttribute("not-found-label", "Produktet blev ikke fundet.");
  page.setAttribute("error-label", "Produktet kunne ikke indlæses.");
  page.append(utilityStrip());
  return page;
}

function createCheckoutPage(): HTMLElement {
  const page = document.createElement("orderly-checkout-page");
  page.append(utilityStrip());
  return page;
}

function createPaymentSuccessPage(): HTMLElement {
  const page = document.createElement("orderly-payment-success-page");
  page.append(utilityStrip());
  return page;
}

function createPaymentFailurePage(): HTMLElement {
  const page = document.createElement("orderly-payment-failure-page");
  page.append(utilityStrip());
  return page;
}

function createTermsPage(): HTMLElement {
  const template = document.createElement("template");
  template.innerHTML = `
    <orderly-page-layout primary-nav-mobile-placement="header">
      <div slot="utility" class="shop-utility-strip" aria-label="Kundefordele">
        <span>Gratis levering over 499 kr.</span>
        <span>30 dages returret</span>
        <span>Sikker betaling</span>
      </div>
      <a slot="header" class="orderly-checkout-page__brand" href="/">
        <span>Orderly Example Shop</span>
      </a>
      <orderly-navigation slot="primary-nav" layout-desktop="horizontal" layout-mobile="burgermenu" aria-label="Hovednavigation"></orderly-navigation>
      <section slot="content" class="orderly-content-page">
        <header class="orderly-content-page__header">
          <h1>Forretningsbetingelser</h1>
          <p>Her finder du betingelser for køb, levering, betaling, retur og reklamation.</p>
        </header>
        <article class="orderly-content-page__card orderly-content-page__body" aria-labelledby="termsTitle">
          <h2 id="termsTitle">Køb hos Orderly Example Shop</h2>
          <p>
            Disse forretningsbetingelser gælder for køb foretaget i Orderly Example Shop. Teksten er eksempelindhold og skal tilpasses den konkrete butik, før den bruges juridisk.
          </p>
          <h2>Virksomhedsoplysninger</h2>
          <p>
            Orderly Example Shop ApS<br>
            Demo Allé 12<br>
            8000 Aarhus C<br>
            Danmark<br>
            Email: hello@example.orderly.shop
          </p>
          <h2>Bestilling</h2>
          <p>
            Når du gennemfører en ordre, modtager du en ordrebekræftelse på den emailadresse, du har angivet. Aftalen er indgået, når ordren er bekræftet.
          </p>
          <h2>Priser og betaling</h2>
          <p>
            Alle priser vises i danske kroner inklusive moms. Betaling gennemføres med de betalingsmetoder, der vises i checkout.
          </p>
          <h2>Levering</h2>
          <p>
            Leveringspris og tilgængelige leveringsmetoder beregnes ud fra kurvens indhold og den leveringsadresse, du indtaster i checkout. Hvis du vælger pakkeshop, skal du vælge et udleveringssted, før ordren gennemføres.
          </p>
          <h2>Fortrydelsesret og retur</h2>
          <p>
            Du har 30 dages returret fra den dag, du modtager varen. Varen skal returneres i væsentligt samme stand, som den blev modtaget.
          </p>
          <h2>Reklamation</h2>
          <p>
            Købelovens reklamationsregler gælder. Kontakt kundeservice hurtigst muligt, hvis en vare har fejl eller mangler.
          </p>
          <h2>Persondata</h2>
          <p>
            Vi behandler de oplysninger, der er nødvendige for at gennemføre din ordre, levere varen og håndtere kundeservice. Oplysninger deles kun med relevante betalings- og leveringspartnere.
          </p>
          <h2>Kontakt</h2>
          <p>
            Har du spørgsmål til din ordre eller disse betingelser, kan du kontakte os på hello@example.orderly.shop.
          </p>
        </article>
      </section>
      <orderly-shop-footer slot="footer"></orderly-shop-footer>
    </orderly-page-layout>
  `;
  return template.content.firstElementChild as HTMLElement;
}

function utilityStrip(): HTMLElement {
  const strip = document.createElement("div");
  strip.slot = "utility";
  strip.className = "shop-utility-strip";
  strip.setAttribute("aria-label", "Kundefordele");
  strip.innerHTML = `
    <span>Gratis levering over 499 kr.</span>
    <span>30 dages returret</span>
    <span>Sikker betaling</span>
  `;
  return strip;
}
