import { BASE_URL } from "../config/environment";

/**
 * Build an absolute URL for a stored image value.
 *
 * Accepts any of the following stored shapes and returns an absolute URL
 * served from `${BASE_URL}/public/uploads/...`:
 *   - "abc123.jpg"                  -> `${BASE_URL}/public/uploads/abc123.jpg`
 *   - "uploads/abc123.jpg"          -> `${BASE_URL}/public/uploads/abc123.jpg`
 *   - "/uploads/abc123.jpg"         -> `${BASE_URL}/public/uploads/abc123.jpg`
 *   - "public/uploads/abc123.jpg"   -> `${BASE_URL}/public/uploads/abc123.jpg`
 *   - "/public/uploads/abc123.jpg"  -> `${BASE_URL}/public/uploads/abc123.jpg`
 *   - "https://cdn/x.jpg"           -> returned unchanged (already absolute)
 *   - "" / null / undefined         -> null
 *
 * If BASE_URL is unset, the value is returned as-is (no host can be inferred).
 */
export function buildImageUrl(image?: string | null): string | null {
  if (!image || typeof image !== "string") return null;
  const trimmed = image.trim();
  if (!trimmed) return null;
  if (/^https?:\/\//i.test(trimmed)) return trimmed;
  if (!BASE_URL) return trimmed;
  const base = BASE_URL.replace(/\/+$/, "");

  // Normalize to a bare filename / sub-path under uploads (no leading slash,
  // no "public/" or "uploads/" prefix) so we can always rebuild the canonical
  // `/public/uploads/...` URL.
  let relative = trimmed.replace(/^\/+/, "");
  if (relative.toLowerCase().startsWith("public/")) {
    relative = relative.slice("public/".length);
  }
  if (relative.toLowerCase().startsWith("uploads/")) {
    relative = relative.slice("uploads/".length);
  }

  return `${base}/public/uploads/${relative}`;
}
