import Log from "sap/base/Log";
import type AppComponent from "sap/fe/core/AppComponent";
import { blockAttribute, defineBuildingBlock } from "sap/fe/core/buildingBlocks/BuildingBlockSupport";
import RuntimeBuildingBlock from "sap/fe/core/buildingBlocks/RuntimeBuildingBlock";
import Button from "sap/m/Button";
import OverflowToolbarLayoutData from "sap/m/OverflowToolbarLayoutData";
import { ButtonType } from "sap/m/library";
import type View from "sap/ui/core/mvc/View";
import FESRHelper from "sap/ui/performance/trace/FESRHelper";

/**
 * Summarization button building block.
 *
 * If the summarization feature is available, this building block will render a button that triggers the summarization feature.
 */
@defineBuildingBlock({
	name: "SummarizationButton",
	namespace: "sap.fe.macros.internal"
})
export default class SummarizationButton extends RuntimeBuildingBlock {
	/**
	 * The ID of the button.
	 */
	@blockAttribute({ type: "string", required: true })
	public id!: string;

	fesrStepName = "fe4:sum:summarize";

	getContent(containingView: View, appComponent: AppComponent): Button | undefined {
		const environmentService = appComponent.getEnvironmentCapabilities();
		let button;
		if (environmentService.environmentCapabilities.SmartSummarize) {
			button = (
				<Button
					id={this.id}
					text="{sap.fe.i18n>SUMMARIZE}"
					icon="sap-icon://ai"
					type={ButtonType.Ghost}
					press={async (): Promise<void> => {
						try {
							await environmentService.prepareFeature("SmartSummarize");
							const library = await import("ux/eng/fioriai/reuse/library");
							await library.summarize({ view: containingView });
						} catch (error) {
							Log.error("Summarization failed", error as Error);
						}
					}}
				>
					{{
						layoutData: (
							<>
								<OverflowToolbarLayoutData priority="High" />
							</>
						)
					}}
				</Button>
			);
			FESRHelper.setSemanticStepname(button, "press", this.fesrStepName);
		}
		return button;
	}
}
