/**
 * @license
 * Copyright 2025 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */
import {} from 'yargs';
import { loadSettings, SettingScope } from '../../config/settings.js';
import { getErrorMessage } from '../../utils/errors.js';
import { debugLogger } from 'sixth-cli-core';
import { ExtensionManager } from '../../config/extension-manager.js';
import { requestConsentNonInteractive } from '../../config/extensions/consent.js';
import { promptForSetting } from '../../config/extensions/extensionSettings.js';
export async function handleDisable(args) {
    const workspaceDir = process.cwd();
    const extensionManager = new ExtensionManager({
        workspaceDir,
        requestConsent: requestConsentNonInteractive,
        requestSetting: promptForSetting,
        settings: loadSettings(workspaceDir).merged,
    });
    await extensionManager.loadExtensions();
    try {
        if (args.scope?.toLowerCase() === 'workspace') {
            await extensionManager.disableExtension(args.name, SettingScope.Workspace);
        }
        else {
            await extensionManager.disableExtension(args.name, SettingScope.User);
        }
        debugLogger.log(`Extension "${args.name}" successfully disabled for scope "${args.scope}".`);
    }
    catch (error) {
        debugLogger.error(getErrorMessage(error));
        process.exit(1);
    }
}
export const disableCommand = {
    command: 'disable [--scope] <name>',
    describe: 'Disables an extension.',
    builder: (yargs) => yargs
        .positional('name', {
        describe: 'The name of the extension to disable.',
        type: 'string',
    })
        .option('scope', {
        describe: 'The scope to disable the extension in.',
        type: 'string',
        default: SettingScope.User,
    })
        .check((argv) => {
        if (argv.scope &&
            !Object.values(SettingScope)
                .map((s) => s.toLowerCase())
                .includes(argv.scope.toLowerCase())) {
            throw new Error(`Invalid scope: ${argv.scope}. Please use one of ${Object.values(SettingScope)
                .map((s) => s.toLowerCase())
                .join(', ')}.`);
        }
        return true;
    }),
    handler: (argv) => {
        handleDisable({
            name: argv['name'],
            scope: argv['scope'],
        });
    },
};
//# sourceMappingURL=disable.js.map