export function normalizeApiBaseUrl(raw: string): string {
	const trimmed = raw.trim().replace(/\/+$/, "");
	if (!trimmed) {
		throw new Error("EXPLABS_BASE_URL is empty");
	}
	return trimmed.endsWith("/v1") ? trimmed : `${trimmed}/v1`;
}

function originPath(apiBaseUrl: string): { api: URL; prefix: string } {
	const api = new URL(normalizeApiBaseUrl(apiBaseUrl));
	const prefix = api.pathname.replace(/\/v1$/, "") || "";
	api.search = "";
	return { api, prefix };
}

export function catalogListUrl(apiBaseUrl: string, offset: number, limit: number): string {
	const { api, prefix } = originPath(apiBaseUrl);
	api.pathname = `${prefix}/api/models`;
	api.searchParams.set("sort", "preferred");
	api.searchParams.set("supports", "tools");
	api.searchParams.set("limit", String(limit));
	api.searchParams.set("offset", String(offset));
	return api.toString();
}

export function creditsUrl(apiBaseUrl: string): string {
	const { api, prefix } = originPath(apiBaseUrl);
	api.pathname = `${prefix}/api/v1/credits`;
	return api.toString();
}
