import type { AnyStarterPackView } from '@atcute/bluesky';
import {
	type ActorIdentifier,
	isActorIdentifier,
	isRecordKey,
	parseResourceUri,
	type RecordKey,
} from '@atcute/lexicons/syntax';

export function parseStarterPackUri(uri?: string): {
	actor: ActorIdentifier;
	rkey: RecordKey;
} | null {
	if (!uri) {
		return null;
	}

	try {
		if (uri.startsWith('at://')) {
			const atUri = parseResourceUri(uri);
			if (atUri.collection !== 'app.bsky.graph.starterpack') {
				return null;
			}
			if (atUri.rkey) {
				return {
					actor: atUri.repo,
					rkey: atUri.rkey,
				};
			}
			return null;
		} else {
			const url = new URL(uri);
			const parts = url.pathname.split('/');
			if (parts.length !== 4) {
				return null;
			}

			const [__, path, actor, rkey] = parts;
			if (path !== 'starter-pack' && path !== 'start') {
				return null;
			}
			if (!isActorIdentifier(actor) || !isRecordKey(rkey)) {
				return null;
			}
			return {
				actor,
				rkey,
			};
		}
	} catch {
		return null;
	}
}

export function httpStarterPackUriToAtUri(httpUri?: string): string | null {
	if (!httpUri) {
		return null;
	}

	const parsed = parseStarterPackUri(httpUri);
	if (!parsed) {
		return null;
	}

	if (httpUri.startsWith('at://')) {
		return httpUri;
	}

	return `at://${parsed.actor}/app.bsky.graph.starterpack/${parsed.rkey}`;
}

export function getStarterPackOgCard(didOrStarterPack: AnyStarterPackView | string, rkey?: string) {
	if (typeof didOrStarterPack === 'string') {
		return `https://ogcard.cdn.bsky.app/start/${didOrStarterPack}/${rkey}`;
	} else {
		const packRkey = parseResourceUri(didOrStarterPack.uri).rkey;
		return `https://ogcard.cdn.bsky.app/start/${didOrStarterPack.creator.did}/${packRkey}`;
	}
}
