// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for details.

import { Code } from "./code";

const SEARCH_INPUT = ".keybindings-header .settings-search-input input";

export class KeybindingsEditor {
    constructor(private code: Code) {}

    async updateKeybinding(
        command: string,
        commandName: string | undefined,
        keybinding: string,
        keybindingTitle: string,
    ): Promise<any> {
        if (process.platform === "darwin") {
            await this.code.dispatchKeybinding("cmd+k cmd+s");
        } else {
            await this.code.dispatchKeybinding("ctrl+k ctrl+s");
        }

        await this.code.waitForActiveElement(SEARCH_INPUT);
        await this.code.waitForSetValue(SEARCH_INPUT, `@command:${command}`);

        const commandTitle = commandName ? `${commandName} (${command})` : command;
        await this.code.waitAndClick(
            `.keybindings-table-container .monaco-list-row .command[title="${commandTitle}"]`,
        );
        await this.code.waitForElement(
            `.keybindings-table-container .monaco-list-row.focused.selected .command[title="${commandTitle}"]`,
        );
        await this.code.dispatchKeybinding("enter");

        await this.code.waitForActiveElement(".defineKeybindingWidget .monaco-inputbox input");
        await this.code.dispatchKeybinding(keybinding);
        await this.code.dispatchKeybinding("enter");
        await this.code.waitForElement(
            `.keybindings-table-container .keybinding-label div[title="${keybindingTitle}"]`,
        );
    }
}
