import i18nKey from "@i18n/i18nKey";
import { i18n } from "@i18n/translation";
import { encodePathSegment } from "./encoding-utils";

export function pathsEqual(path1: string, path2: string) {
	const normalizedPath1 = path1.replace(/^\/|\/$/g, "").toLowerCase();
	const normalizedPath2 = path2.replace(/^\/|\/$/g, "").toLowerCase();
	return normalizedPath1 === normalizedPath2;
}

function joinUrl(...parts: string[]): string {
	const joined = parts.join("/");
	return joined.replace(/\/+/g, "/");
}

export function getPostUrlBySlug(slug: string): string {
	return url(`/posts/${slug}/`);
}

export function getTagUrl(tag: string): string {
	if (!tag) return url("/archive/tag/");

	// use common encoding function
	const encodedTag = encodePathSegment(tag);
	const tagUrl = `/archive/tag/${encodedTag}/`;
	console.log(`Generating URL for tag "${tag.trim()}" => "${tagUrl}"`);
	return url(tagUrl);
}

export function getCategoryUrl(category: string): string {
	console.log(`category: ${category}`);
	if (!category) return url("/archive/category/");

	const trimmedCategory = category.trim();
	if (trimmedCategory === i18n(i18nKey.uncategorized))
		return url("/archive/category/uncategorized/");

	return url(
		`/archive/category/${encodeURIComponent(trimmedCategory).replace(/%20/g, "+")}/`,
	);
}

export function getDir(path: string): string {
	const lastSlashIndex = path.lastIndexOf("/");
	if (lastSlashIndex < 0) {
		return "/";
	}
	return path.substring(0, lastSlashIndex + 1);
}

export function url(path: string) {
	return joinUrl("", import.meta.env.BASE_URL, path);
}
