import { getAssetFallback } from "@/lib/asset-fallbacks"

export const assetBaseUrl =
  process.env.NEXT_PUBLIC_ASSET_BASE_URL ||
  "https://mgmindia.s3.ap-south-1.amazonaws.com"

export function resolveAssetUrl(value: string): string {
  const fallback = getAssetFallback(value)
  if (fallback) return fallback

  if (value.startsWith("/assets/") || value.startsWith("/uploads/")) {
    return `${assetBaseUrl.replace(/\/+$/, "")}${value}`
  }

  if (value.startsWith("http")) {
    try {
      const url = new URL(value)
      const isLocalUpload =
        (url.hostname === "localhost" ||
          url.hostname === "127.0.0.1" ||
          url.hostname === "0.0.0.0") &&
        url.pathname.startsWith("/uploads/")

      if (isLocalUpload) {
        return `${assetBaseUrl.replace(/\/+$/, "")}${url.pathname}${url.search}`
      }
    } catch {
      return value
    }
  }

  return value
}

export function resolveUploadUrl(value: string): string {
  if (!value.startsWith("/uploads/")) return value
  return `${assetBaseUrl.replace(/\/+$/, "")}${value}`
}

export function resolveAssetUrls<T>(value: T): T {
  if (typeof value === "string") return resolveAssetUrl(value) as T

  if (Array.isArray(value)) {
    return value.map((item) => resolveAssetUrls(item)) as T
  }

  if (value && typeof value === "object") {
    return Object.fromEntries(
      Object.entries(value).map(([key, entry]) => [key, resolveAssetUrls(entry)]),
    ) as T
  }

  return value
}
