/**
 * @module mermaid/mermaidsplitviewcommand
 */

import { checkIsOn } from '../utils.js';
import { Command, ModelElement } from 'ckeditor5';

/**
 * The mermaid split view command.
 *
 * Allows to switch to a split view mode.
 */
export default class MermaidSplitViewCommand extends Command {

	override refresh() {
		const editor = this.editor;
		const documentSelection = editor.model.document.selection;
		const selectedElement = documentSelection.getSelectedElement();
		const isSelectedElementMermaid = selectedElement && selectedElement.name === 'mermaid';

		if ( isSelectedElementMermaid || documentSelection.getLastPosition()?.findAncestor( 'mermaid' ) ) {
			this.isEnabled = !!selectedElement;
		} else {
			this.isEnabled = false;
		}

		this.value = checkIsOn( editor, 'split' );
	}

	override execute() {
		const editor = this.editor;
		const model = editor.model;
		const documentSelection = this.editor.model.document.selection;
		const mermaidItem = (documentSelection.getSelectedElement() || documentSelection.getLastPosition()?.parent) as ModelElement;

		model.change( writer => {
			if ( mermaidItem.getAttribute( 'displayMode' ) !== 'split' ) {
				writer.setAttribute( 'displayMode', 'split', mermaidItem );
			}
		} );
	}
}
