import 'package:oto/oto/commands/aws/awscli.dart';
import 'package:oto/oto/commands/build/app_data_creator.dart';
import 'package:oto/oto/commands/build/build_dart.dart';
import 'package:oto/oto/commands/build/build_dart_compile.dart';
import 'package:oto/oto/commands/build/build_dot_net.dart';
import 'package:oto/oto/commands/build/build_flutter.dart';
import 'package:oto/oto/commands/build/build_ios.dart';
import 'package:oto/oto/commands/build/build_msbuild.dart';
import 'package:oto/oto/commands/build/publish_ios.dart';
import 'package:oto/oto/commands/build/testflight_ios.dart';
import 'package:oto/oto/commands/build/xcodeproj.dart';
import 'package:oto/oto/commands/command.dart';
import 'package:oto/oto/commands/docker/docker.dart';
import 'package:oto/oto/commands/file/copy.dart';
import 'package:oto/oto/commands/file/delete.dart';
import 'package:oto/oto/commands/file/directory.dart';
import 'package:oto/oto/commands/file/file.dart';
import 'package:oto/oto/commands/file/file_diff_check.dart';
import 'package:oto/oto/commands/file/rename.dart';
import 'package:oto/oto/commands/file/zip.dart';
import 'package:oto/oto/commands/ftp/download.dart';
import 'package:oto/oto/commands/ftp/upload.dart';
import 'package:oto/oto/commands/git/git.dart';
import 'package:oto/oto/commands/git/git_hub.dart';
import 'package:oto/oto/commands/gradle/gradle.dart';
import 'package:oto/oto/commands/infra/smb_authorize.dart';
import 'package:oto/oto/commands/jenkins/jenkins.dart';
import 'package:oto/oto/commands/jira/jira.dart';
import 'package:oto/oto/commands/notification/mattermost.dart';
import 'package:oto/oto/commands/notification/slack.dart';
import 'package:oto/oto/commands/process/process.dart';
import 'package:oto/oto/commands/proto/protobuf.dart';
import 'package:oto/oto/commands/shell/shell.dart';
import 'package:oto/oto/commands/util/json.dart';
import 'package:oto/oto/commands/util/print.dart';
import 'package:oto/oto/commands/util/set_value.dart';
import 'package:oto/oto/commands/util/string_util.dart';
import 'package:oto/oto/commands/util/timer.dart';
import 'package:oto/oto/commands/web/web.dart';

void registerAllCommands() {
  Command.register(
    CommandType.SimpleCommand,
    () => SimpleCommand(),
    spec: const CommandSpec(
      type: CommandType.SimpleCommand,
      category: 'util',
      dataModel: 'DataSimpleCommand',
    ),
  );

  // build
  registerBuildIosCommands();
  registerTestflightCommands();
  registerXcodeprojCommands();
  registerAppDataCreatorCommands();
  registerBuildDartCommands();
  registerBuildDartCompileCommands();
  registerBuildDotNetCommands();
  registerBuildFlutterCommands();
  registerBuildMsbuildCommands();
  registerPublishIosCommands();

  // git
  registerGitCommands();
  registerGitHubCommands();

  // notification
  registerSlackCommands();
  registerMattermostCommands();

  // file
  registerCopyCommand();
  registerDeleteCommand();
  registerRenameCommand();
  registerDirectoryCommand();
  registerFileCommands();
  registerFileDiffCheckCommand();
  registerZipCommand();

  // ftp
  registerFtpUploadCommand();
  registerFtpDownloadCommand();

  // util
  registerPrintCommand();
  registerSetValueCommand();
  registerStringUtilCommands();
  registerJsonCommands();
  registerTimerCommand();

  // shell / process / infra
  registerShellCommands();
  registerProcessCommands();
  registerInfraCommands();

  // external services
  registerJiraCommand();
  registerProtobufCommand();
  registerAwsCliCommand();
  registerDockerCommand();
  registerGradleCommand();
  registerWebCommands();
  registerJenkinsCommands();
}
