# rubocop:disable UnusedMethodArgument # rubocop:disable MethodMissing # rubocop:disable PerceivedComplexity # rubocop:disable CyclomaticComplexity # rubocop:disable AbcSize # rubocop:disable Security/Eval task :rc do

RailsRemoteConsoleTask.new.call(ARGV[1])

end

class RailsRemoteConsoleTask

def call(in_env)
  env = in_env || 'staging'
  eval File.read("#{Rails.root}/config/deploy.rb")
  eval File.read("#{Rails.root}/config/deploy/#{env}.rb")

  @port ||= 22

  cmd = "ssh -l #{@server_user} #{@server_ip} -p#{@port} -t \

'source ~/.bashrc && cd #{@deploy_to}/current && \ /home/#{@server_user}/.rbenv/shims/ruby bin/rails c #{env}'“

  exec cmd
end

def method_missing(name, *args, &block)
  if name == :fetch
    if %w[application stage deploy_user full_app_name].index(args[0].to_s)
      return instance_variable_get("@#{args[0]}")
    end
  end

  return self unless %I[server set].include?(name)
  @server_ip ||= if name == :server
                   args[0]
                 elsif name == :set && args[0] == :domain
                   args[1]
                 end
  @server_user ||= args[1] if name == :set && args[0] == :user
  if name == :set && args[0] == :deploy_user
    @deploy_user ||= args[1]
    @server_user = @deploy_user
  end

  @deploy_to ||= args[1] if name == :set && args[0] == :deploy_to
  @port ||= args[1] if name == :set && args[0] == :port

  @application ||= args[1] if name == :set && args[0].to_s == 'application'
  @stage ||= args[1] if name == :set && args[0].to_s == 'stage'
  @full_app_name ||= args[1] \
    if name == :set && args[0].to_s == 'full_app_name'
end

end