# frozen_string_literal: true

require "thor"

module Neetob
  class CLI < Thor
    require_relative "cli/heroku/commands"
    require_relative "cli/cloudflare/commands"
    require_relative "cli/sre/commands"
    require_relative "cli/github/commands"
    require_relative "cli/users/commands"
    require_relative "cli/fetchorupdate_repos/execute"
    require_relative "cli/local/commands"
    require_relative "cli/code/commands"
    require_relative "cli/neeto_deploy/commands"
    require_relative "cli/redirections/commands"
    require_relative "cli/monthly_audit/commands"

    class_option :sandbox,
      {
        type: :boolean, default: false,
        desc: "All the commands in sandbox mode will run only on the \"neeto-dummy\" app."
      }

    def self.start(*)
      super
    end

    desc "heroku", "Interact with any resource in Heroku"
    subcommand "heroku", Heroku::Commands

    desc "github", "Interact with any resource in Github"
    subcommand "github", Github::Commands

    desc "cloudflare", "Interact with any resource in Cloudflare"
    subcommand "cloudflare", Cloudflare::Commands

    desc "sre", "Commands related to the SRE checklist"
    subcommand "sre", Sre::Commands

    desc "neetodeploy", "Interact with resources in neetoDeploy"
    subcommand "neetodeploy", NeetoDeploy::Commands

    desc "users", "Interact with the contributors of neeto apps"
    subcommand "users", Users::Commands

    desc "local", "Interact with the local neeto repos"
    subcommand "local", Local::Commands

    desc "code", "Interact with code base of neeto products"
    subcommand "code", Code::Commands

    desc "redirections", "Check whether the redirections are working properly"
    subcommand "redirections", Redirections::Commands

    desc "make_repos_uptodate", "Uptodate all neeto repos"
    option :repos, type: :array, aliases: "-r", default: ["*"],
      desc: "Github repo names. Can be matched using the '*' wildcard. Example: \"neeto*\" \"neeto-cal-web\", also providing \"all\" as value matches all neeto repos. Note: The default value is \"*\", hence all neeto repos would be affected."
    def make_repos_uptodate
      FetchorupdateRepos::Execute.new(options[:sandbox], options[:repos]).run
    end

    desc "monthly_audit", "Monthly audit of all the neeto apps/domains/functionalities/ops"
    subcommand "monthly_audit", MonthlyAudit::Commands
  end
end