// `@stripe/stripe-js` injicerar sitt skript i sidan redan vid IMPORT,
// inte när någon ska betala. Följden var att ALVA — som varken har eller
// vill ha en betalleverantör — laddade Stripe på varje sidvisning, och
// bakom artefaktens CSP blockerades anropet och syntes som ett fel i
// konsolen på en produkt som inte tar emot betalningar alls.
//
// `/pure` är samma modul utan den sidoeffekten: skriptet hämtas först om
// och när loadStripe faktiskt anropas. ALVA anropar det aldrig — där
// faktureras det, och fakturan skapas i systemet
// (services/gemensam/fakturering.mjs). Butikens kassa fungerar som
// tidigare, men bara när någon öppnar den.
import type { Stripe } from "@stripe/stripe-js";
import { loadStripe } from "@stripe/stripe-js/pure";

export type StripeEnv = "sandbox" | "live";

const clientToken = import.meta.env.VITE_PAYMENTS_CLIENT_TOKEN as string | undefined;

function paymentsEnvironment(): StripeEnv {
  if (clientToken?.startsWith("pk_test_")) return "sandbox";
  if (clientToken?.startsWith("pk_live_")) return "live";
  throw new Error(
    "Betalningar är inte konfigurerade för denna build. Slutför go-live i Payments-fliken för att aktivera skarpa betalningar."
  );
}

let stripePromise: Promise<Stripe | null> | null = null;

export function getStripe(): Promise<Stripe | null> {
  if (!stripePromise) {
    paymentsEnvironment();
    stripePromise = loadStripe(clientToken as string);
  }
  return stripePromise;
}

export function getStripeEnvironment(): StripeEnv {
  return paymentsEnvironment();
}

export function hasPaymentsConfigured(): boolean {
  return !!clientToken && (clientToken.startsWith("pk_test_") || clientToken.startsWith("pk_live_"));
}
