import type { ChatBskyConvoDefs } from '@atcute/bluesky';

import { targetToShareUrl } from '#/lib/routes/app-links';
import { toShortUrl } from '#/lib/utils/url';

import { m } from '#/paraglide/messages';

/**
 * computes the preview text for a message quoted in a reply.
 *
 * @param message the message being quoted
 * @returns the preview text and whether it is subtle (a placeholder rather than real message content)
 */
export function getReplyPreviewText(message: ChatBskyConvoDefs.MessageView): {
	subtle: boolean;
	text: string;
} {
	const text = message.text;
	if (text.trim()) {
		return { subtle: false, text };
	}

	if (message.embed?.$type === 'chat.bsky.embed.joinLink#view') {
		const { joinLinkPreview } = message.embed;
		switch (joinLinkPreview.$type) {
			case 'chat.bsky.group.defs#joinLinkPreviewView': {
				return {
					subtle: true,
					text: targetToShareUrl({ name: 'GroupChatJoin', code: joinLinkPreview.code }),
				};
			}
			case 'chat.bsky.group.defs#disabledJoinLinkPreviewView': {
				return { subtle: true, text: m['common.chat.inviteLinkDisabled']() };
			}
			case 'chat.bsky.group.defs#invalidJoinLinkPreviewView': {
				return { subtle: true, text: m['common.chat.inviteLinkInvalid']() };
			}
			default: {
				return { subtle: true, text: m['common.chat.inviteLink']() };
			}
		}
	}

	if (message.embed?.$type === 'app.bsky.embed.record#view') {
		const { record } = message.embed;
		if (record.$type === 'app.bsky.embed.record#viewRecord') {
			const inner = record.embeds?.[0];
			if (inner?.$type === 'app.bsky.embed.external#view') {
				return { subtle: true, text: toShortUrl(inner.external.uri) };
			}
			return { subtle: true, text: m['common.embed.quotedPost']() };
		}
	}

	return { subtle: true, text: m['common.altText.noText']() };
}
