import { defaultLocale, locales, type Locale } from "@/lib/locales";

export const productSlugs = ["pureestate", "buildpro", "societypro"] as const;
export type ProductSlug = (typeof productSlugs)[number];

export const marketingSlugs = [
  "solutions",
  "industries",
  "pricing",
  "resources",
  "contact",
  "demo",
  "privacy",
  "terms",
  "security",
] as const;

export type MarketingSlug = (typeof marketingSlugs)[number];

export function isProductSlug(slug: string): slug is ProductSlug {
  return productSlugs.includes(slug as ProductSlug);
}

export function isMarketingSlug(slug: string): slug is MarketingSlug {
  return marketingSlugs.includes(slug as MarketingSlug);
}

export function localizedPath(locale: Locale, path = "") {
  const normalizedPath = path === "/" ? "" : path.startsWith("/") ? path : `/${path}`;
  return `/${locale}${normalizedPath}`;
}

export function replaceLocale(pathname: string, locale: Locale) {
  const segments = pathname.split("/");
  const currentLocale = segments[1];

  if (locales.includes(currentLocale as Locale)) {
    segments[1] = locale;
    return segments.join("/") || localizedPath(locale);
  }

  return localizedPath(locale, pathname);
}

export function detectLocale(acceptLanguage: string | null): Locale {
  const languages = acceptLanguage
    ?.split(",")
    .map((item) => item.trim().split(";")[0]?.toLowerCase())
    .filter(Boolean);

  for (const language of languages ?? []) {
    const locale = locales.find((item) => language === item || language?.startsWith(`${item}-`));
    if (locale) return locale;
  }

  return defaultLocale;
}
