/**
 * خواندن تنظیمات در runtime (بدون bake شدن در بیلد)
 * اولویت: window.__RUNTIME_CONFIG__ → env سرور (BASE_URL) → NEXT_PUBLIC_*
 */

export type RuntimeConfig = {
  BASE_URL?: string;
  WEBSITE_URL?: string;
  ADMIN_PANEL_URL?: string;
  MAP_IR_KEY?: string;
};

declare global {
  interface Window {
    __RUNTIME_CONFIG__?: RuntimeConfig;
  }
}

function normalizeApiUrl(url: string) {
  if (!url) return "";
  return url.endsWith("/") ? url : `${url}/`;
}

export function getRuntimeConfig(): RuntimeConfig {
  if (typeof window !== "undefined" && window.__RUNTIME_CONFIG__) {
    return window.__RUNTIME_CONFIG__;
  }
  // سمت سرور: env در استارت پروسس خوانده می‌شود (بدون بیلد مجدد)
  return {
    BASE_URL: process.env.BASE_URL || process.env.NEXT_PUBLIC_BASE_URL || "",
    WEBSITE_URL: process.env.WEBSITE_URL || process.env.NEXT_PUBLIC_WEBSITE_URL || "",
    ADMIN_PANEL_URL:
      process.env.ADMIN_PANEL_URL || process.env.NEXT_PUBLIC_ADMIN_PANEL_URL || "",
    MAP_IR_KEY: process.env.MAP_IR_KEY || process.env.NEXT_PUBLIC_MAP_IR_KEY || "",
  };
}

export function getBaseUrl() {
  return normalizeApiUrl(getRuntimeConfig().BASE_URL || "");
}

export function getWebsiteUrl() {
  return getRuntimeConfig().WEBSITE_URL || "";
}

export function getAdminPanelUrl() {
  return getRuntimeConfig().ADMIN_PANEL_URL || "";
}

export function getMapIrKey() {
  return (getRuntimeConfig().MAP_IR_KEY || "").trim();
}

/** سازگار با `${BASE_URL}v1/...` — هر بار از runtime می‌خواند */
export const BASE_URL = {
  toString: () => getBaseUrl(),
  valueOf: () => getBaseUrl(),
  [Symbol.toPrimitive]: () => getBaseUrl(),
} as unknown as string;
