import { normalizeOptionalString } from "@agentai2027/openclaw-zh/plugin-sdk/text-runtime";
import { presentationToInteractiveReply, reduceInteractiveReply } from "@agentai2027/openclaw-zh/plugin-sdk/interactive-runtime";
//#region extensions/slack/src/reply-action-ids.ts
const SLACK_REPLY_BUTTON_ACTION_ID = "openclaw:reply_button";
const SLACK_REPLY_SELECT_ACTION_ID = "openclaw:reply_select";
//#endregion
//#region extensions/slack/src/truncate.ts
function truncateSlackText(value, max) {
	const trimmed = value.trim();
	if (trimmed.length <= max) return trimmed;
	if (max <= 1) return trimmed.slice(0, max);
	return `${trimmed.slice(0, max - 1)}…`;
}
//#endregion
//#region extensions/slack/src/blocks-render.ts
const SLACK_SECTION_TEXT_MAX = 3e3;
const SLACK_PLAIN_TEXT_MAX = 75;
function buildSlackReplyButtonActionId(buttonIndex, choiceIndex) {
	return `${SLACK_REPLY_BUTTON_ACTION_ID}:${String(buttonIndex)}:${String(choiceIndex + 1)}`;
}
function buildSlackReplySelectActionId(selectIndex) {
	return `${SLACK_REPLY_SELECT_ACTION_ID}:${String(selectIndex)}`;
}
function resolveSlackButtonStyle(style) {
	if (style === "primary" || style === "danger") return style;
	if (style === "success") return "primary";
}
function buildSlackInteractiveBlocks(interactive) {
	return reduceInteractiveReply(interactive, {
		blocks: [],
		buttonIndex: 0,
		selectIndex: 0
	}, (state, block) => {
		if (block.type === "text") {
			const trimmed = block.text.trim();
			if (!trimmed) return state;
			state.blocks.push({
				type: "section",
				text: {
					type: "mrkdwn",
					text: truncateSlackText(trimmed, SLACK_SECTION_TEXT_MAX)
				}
			});
			return state;
		}
		if (block.type === "buttons") {
			const elements = block.buttons.flatMap((button, choiceIndex) => {
				if (!button.value && !button.url) return [];
				const style = resolveSlackButtonStyle(button.style);
				return [{
					type: "button",
					action_id: buildSlackReplyButtonActionId(state.buttonIndex + 1, choiceIndex),
					text: {
						type: "plain_text",
						text: truncateSlackText(button.label, SLACK_PLAIN_TEXT_MAX),
						emoji: true
					},
					...button.value ? { value: button.value } : {},
					...button.url ? { url: button.url } : {},
					...style ? { style } : {}
				}];
			});
			if (elements.length === 0) return state;
			state.blocks.push({
				type: "actions",
				block_id: `openclaw_reply_buttons_${++state.buttonIndex}`,
				elements
			});
			return state;
		}
		if (block.options.length === 0) return state;
		state.blocks.push({
			type: "actions",
			block_id: `openclaw_reply_select_${++state.selectIndex}`,
			elements: [{
				type: "static_select",
				action_id: buildSlackReplySelectActionId(state.selectIndex),
				placeholder: {
					type: "plain_text",
					text: truncateSlackText(normalizeOptionalString(block.placeholder) ?? "Choose an option", SLACK_PLAIN_TEXT_MAX),
					emoji: true
				},
				options: block.options.map((option, _choiceIndex) => ({
					text: {
						type: "plain_text",
						text: truncateSlackText(option.label, SLACK_PLAIN_TEXT_MAX),
						emoji: true
					},
					value: option.value
				}))
			}]
		});
		return state;
	}).blocks;
}
function buildSlackPresentationBlocks(presentation) {
	if (!presentation) return [];
	const blocks = [];
	if (presentation.title) blocks.push({
		type: "header",
		text: {
			type: "plain_text",
			text: truncateSlackText(presentation.title, 150),
			emoji: true
		}
	});
	for (const block of presentation.blocks) {
		if (block.type === "text" || block.type === "context") {
			const text = block.text.trim();
			if (!text) continue;
			if (block.type === "context") blocks.push({
				type: "context",
				elements: [{
					type: "mrkdwn",
					text: truncateSlackText(text, SLACK_SECTION_TEXT_MAX)
				}]
			});
			else blocks.push({
				type: "section",
				text: {
					type: "mrkdwn",
					text: truncateSlackText(text, SLACK_SECTION_TEXT_MAX)
				}
			});
			continue;
		}
		if (block.type === "divider") blocks.push({ type: "divider" });
	}
	const interactive = presentationToInteractiveReply({ blocks: presentation.blocks.filter((block) => block.type === "buttons" || block.type === "select") });
	blocks.push(...buildSlackInteractiveBlocks(interactive));
	return blocks;
}
//#endregion
export { SLACK_REPLY_SELECT_ACTION_ID as a, SLACK_REPLY_BUTTON_ACTION_ID as i, buildSlackPresentationBlocks as n, truncateSlackText as r, buildSlackInteractiveBlocks as t };
