'use strict';
import { ClearFileAnnotationsCommand } from './commands/clearFileAnnotations';
import { CloseUnchangedFilesCommand } from './commands/closeUnchangedFiles';
import { CopyMessageToClipboardCommand } from './commands/copyMessageToClipboard';
import { CopyRemoteFileUrlToClipboardCommand } from './commands/copyRemoteFileUrlToClipboard';
import { CopyShaToClipboardCommand } from './commands/copyShaToClipboard';
import { DiffBranchWithBranchCommand } from './commands/diffBranchWithBranch';
import { DiffDirectoryCommand } from './commands/diffDirectory';
import { DiffLineWithPreviousCommand } from './commands/diffLineWithPrevious';
import { DiffLineWithWorkingCommand } from './commands/diffLineWithWorking';
import { DiffWithCommand } from './commands/diffWith';
import { DiffWithBranchCommand } from './commands/diffWithBranch';
import { DiffWithNextCommand } from './commands/diffWithNext';
import { DiffWithPreviousCommand } from './commands/diffWithPrevious';
import { DiffWithRevisionCommand } from './commands/diffWithRevision';
import { DiffWithWorkingCommand } from './commands/diffWithWorking';
import { ExternalDiffCommand } from './commands/externalDiff';
import { OpenBranchesInRemoteCommand } from './commands/openBranchesInRemote';
import { OpenBranchInRemoteCommand } from './commands/openBranchInRemote';
import { OpenChangedFilesCommand } from './commands/openChangedFiles';
import { OpenCommitInRemoteCommand } from './commands/openCommitInRemote';
import { OpenFileInRemoteCommand } from './commands/openFileInRemote';
import { OpenFileRevisionCommand } from './commands/openFileRevision';
import { OpenInRemoteCommand } from './commands/openInRemote';
import { OpenRepoInRemoteCommand } from './commands/openRepoInRemote';
import { OpenWorkingFileCommand } from './commands/openWorkingFile';
import { ResetSuppressedWarningsCommand } from './commands/resetSuppressedWarnings';
import { ShowCommitSearchCommand } from './commands/showCommitSearch';
import { ShowLastQuickPickCommand } from './commands/showLastQuickPick';
import { ShowQuickBranchHistoryCommand } from './commands/showQuickBranchHistory';
import { ShowQuickCommitDetailsCommand } from './commands/showQuickCommitDetails';
import { ShowQuickCommitFileDetailsCommand } from './commands/showQuickCommitFileDetails';
import { ShowQuickCurrentBranchHistoryCommand } from './commands/showQuickCurrentBranchHistory';
import { ShowQuickFileHistoryCommand } from './commands/showQuickFileHistory';
import { ShowQuickRepoStatusCommand } from './commands/showQuickRepoStatus';
import { ShowQuickStashListCommand } from './commands/showQuickStashList';
import { ShowViewCommand } from './commands/showView';
import { StashApplyCommand } from './commands/stashApply';
import { StashDeleteCommand } from './commands/stashDelete';
import { StashSaveCommand } from './commands/stashSave';
import { SwitchModeCommand, ToggleReviewModeCommand, ToggleZenModeCommand } from './commands/switchMode';
import { ToggleCodeLensCommand } from './commands/toggleCodeLens';
import { ToggleFileBlameCommand } from './commands/toggleFileBlame';
import { ToggleFileHeatmapCommand } from './commands/toggleFileHeatmap';
import { ToggleFileRecentChangesCommand } from './commands/toggleFileRecentChanges';
import { ToggleLineBlameCommand } from './commands/toggleLineBlame';
import { CommandContext, setCommandContext } from './constants';
import { Container } from './container';

export * from './commands/common';
export * from './commands/clearFileAnnotations';
export * from './commands/closeUnchangedFiles';
export * from './commands/copyMessageToClipboard';
export * from './commands/copyRemoteFileUrlToClipboard';
export * from './commands/copyShaToClipboard';
export * from './commands/diffBranchWithBranch';
export * from './commands/diffDirectory';
export * from './commands/diffLineWithPrevious';
export * from './commands/diffLineWithWorking';
export * from './commands/diffWith';
export * from './commands/diffWithBranch';
export * from './commands/diffWithNext';
export * from './commands/diffWithPrevious';
export * from './commands/diffWithRevision';
export * from './commands/diffWithWorking';
export * from './commands/externalDiff';
export * from './commands/openBranchesInRemote';
export * from './commands/openBranchInRemote';
export * from './commands/openChangedFiles';
export * from './commands/openCommitInRemote';
export * from './commands/openFileInRemote';
export * from './commands/openFileRevision';
export * from './commands/openInRemote';
export * from './commands/openRepoInRemote';
export * from './commands/openWorkingFile';
export * from './commands/resetSuppressedWarnings';
export * from './commands/showCommitSearch';
export * from './commands/showView';
export * from './commands/showLastQuickPick';
export * from './commands/showQuickBranchHistory';
export * from './commands/showQuickCommitDetails';
export * from './commands/showQuickCommitFileDetails';
export * from './commands/showQuickCurrentBranchHistory';
export * from './commands/showQuickFileHistory';
export * from './commands/showQuickRepoStatus';
export * from './commands/showQuickStashList';
export * from './commands/stashApply';
export * from './commands/stashDelete';
export * from './commands/stashSave';
export * from './commands/switchMode';
export * from './commands/toggleCodeLens';
export * from './commands/toggleFileBlame';
export * from './commands/toggleFileHeatmap';
export * from './commands/toggleFileRecentChanges';
export * from './commands/toggleLineBlame';

export function configureCommands(): void {
    setCommandContext(CommandContext.KeyMap, Container.config.keymap);

    Container.context.subscriptions.push(new ClearFileAnnotationsCommand());
    Container.context.subscriptions.push(new CloseUnchangedFilesCommand());
    Container.context.subscriptions.push(new CopyMessageToClipboardCommand());
    Container.context.subscriptions.push(new CopyRemoteFileUrlToClipboardCommand());
    Container.context.subscriptions.push(new CopyShaToClipboardCommand());
    Container.context.subscriptions.push(new DiffBranchWithBranchCommand());
    Container.context.subscriptions.push(new DiffDirectoryCommand());
    Container.context.subscriptions.push(new DiffLineWithPreviousCommand());
    Container.context.subscriptions.push(new DiffLineWithWorkingCommand());
    Container.context.subscriptions.push(new DiffWithCommand());
    Container.context.subscriptions.push(new DiffWithBranchCommand());
    Container.context.subscriptions.push(new DiffWithNextCommand());
    Container.context.subscriptions.push(new DiffWithPreviousCommand());
    Container.context.subscriptions.push(new DiffWithRevisionCommand());
    Container.context.subscriptions.push(new DiffWithWorkingCommand());
    Container.context.subscriptions.push(new ExternalDiffCommand());
    Container.context.subscriptions.push(new OpenBranchesInRemoteCommand());
    Container.context.subscriptions.push(new OpenBranchInRemoteCommand());
    Container.context.subscriptions.push(new OpenChangedFilesCommand());
    Container.context.subscriptions.push(new OpenCommitInRemoteCommand());
    Container.context.subscriptions.push(new OpenFileInRemoteCommand());
    Container.context.subscriptions.push(new OpenFileRevisionCommand());
    Container.context.subscriptions.push(new OpenInRemoteCommand());
    Container.context.subscriptions.push(new OpenRepoInRemoteCommand());
    Container.context.subscriptions.push(new OpenWorkingFileCommand());
    Container.context.subscriptions.push(new ResetSuppressedWarningsCommand());
    Container.context.subscriptions.push(new ShowCommitSearchCommand());
    Container.context.subscriptions.push(new ShowViewCommand());
    Container.context.subscriptions.push(new ShowLastQuickPickCommand());
    Container.context.subscriptions.push(new ShowQuickBranchHistoryCommand());
    Container.context.subscriptions.push(new ShowQuickCommitDetailsCommand());
    Container.context.subscriptions.push(new ShowQuickCommitFileDetailsCommand());
    Container.context.subscriptions.push(new ShowQuickCurrentBranchHistoryCommand());
    Container.context.subscriptions.push(new ShowQuickFileHistoryCommand());
    Container.context.subscriptions.push(new ShowQuickRepoStatusCommand());
    Container.context.subscriptions.push(new ShowQuickStashListCommand());
    Container.context.subscriptions.push(new StashApplyCommand());
    Container.context.subscriptions.push(new StashDeleteCommand());
    Container.context.subscriptions.push(new StashSaveCommand());
    Container.context.subscriptions.push(new SwitchModeCommand());
    Container.context.subscriptions.push(new ToggleCodeLensCommand());
    Container.context.subscriptions.push(new ToggleFileBlameCommand());
    Container.context.subscriptions.push(new ToggleFileHeatmapCommand());
    Container.context.subscriptions.push(new ToggleFileRecentChangesCommand());
    Container.context.subscriptions.push(new ToggleLineBlameCommand());
    Container.context.subscriptions.push(new ToggleReviewModeCommand());
    Container.context.subscriptions.push(new ToggleZenModeCommand());
}
