# frozen_string_literal: true

require 'thor'
require_relative '../utilities/utilities'

# :reek:FeatureEnvy { enabled: false }
# :reek:UtilityFunction { enabled: false }
class UtilityCommands < Thor
  desc 'path [PATH]', 'Sets the default path for scaffolding'
  option :feature,
         type: :boolean, required: false, desc: 'The default path for your features', aliases: '-f'
  option :helper,
         type: :boolean, required: false, desc: 'The default path for your helpers', aliases: '-h'
  option :spec,
         type: :boolean, required: false, desc: 'The default path for your specs', aliases: '-s'

  def path(default_path)
    type = options.empty? ? 'page' : options.keys.first
    Utilities.send("#{type}_path=", default_path)
  end

  desc 'url [URL]', 'Sets the default url for a project'

  def url(default_url)
    Utilities.url = default_url
  end

  desc 'browser [BROWSER]', 'Sets the default browser for a project'
  option :opts,
         type: :array, required: false, desc: 'The options you want your browser to run with', aliases: '-o'
  option :delete,
         type: :boolean, required: false, desc: 'This will delete your browser options', aliases: '-d'

  def browser(default_browser = nil)
    Utilities.browser = default_browser if default_browser
    selected_options = options[:opts]
    browser_options(selected_options) if selected_options || options[:delete]
  end

  desc 'browser_options [OPTIONS]', 'Sets the browser options for the project'
  option :delete,
         type: :boolean, required: false, desc: 'This will delete your browser options', aliases: '-d'

  def browser_options(*opts)
    Utilities.browser_options = opts unless opts.empty?
    Utilities.delete_browser_options if options[:delete]
  end

  desc 'raid', 'It runs all the tests in a project'
  option :parallel,
         type: :boolean, required: false, desc: 'It runs the tests in parallel', aliases: '-p'
  option :opts,
         type: :array, required: false, desc: 'The options that your run will run with', aliases: '-o'

  def raid
    selected_options = options[:opts]
    if options[:parallel]
      Utilities.parallel_run(selected_options)
    else
      Utilities.run(selected_options)
    end
  end

  desc 'config', 'Creates a new config file'
  option :path,
         type: :string, required: false, desc: 'The path where your config file will be created', aliases: '-p'
  option :delete,
         type: :boolean, required: false, desc: 'This will delete the selected config file', aliases: '-d'

  desc 'platform [PLATFORM]', 'Sets the default platform for a cross-platform project'

  def platform(platform)
    Utilities.platform = platform
  end

  desc 'start_appium', 'It starts the appium server'
  def start_appium
    system 'appium  --base-path /wd/hub'
  end
end