import { env } from "@/server/env";
import { assertProviderAllowed, requireProviderEndpoint } from "@/server/providers/policy";
import { HttpPaymentProvider } from "@/server/providers/payment/http-provider";
import { LocalPaymentProvider } from "@/server/providers/payment/local-provider";
import type { PaymentProvider } from "@/server/providers/payment/types";

export function createPaymentProvider(): PaymentProvider {
  const config = env();
  assertProviderAllowed(config.PAYMENT_PROVIDER, "payment");

  if (config.PAYMENT_PROVIDER === "local") {
    return new LocalPaymentProvider();
  }

  requireProviderEndpoint("payment", config.PAYMENT_PROVIDER_BASE_URL, config.PAYMENT_PROVIDER_API_KEY);
  return new HttpPaymentProvider(config.PAYMENT_PROVIDER, config.PAYMENT_PROVIDER_BASE_URL!, config.PAYMENT_PROVIDER_API_KEY!);
}
