module Fastlane
  module Actions
    module SharedValues
    end

    class ScpAction < Action

      def self.run(params)
        Actions.verify_gem!('net-scp')
        require "net/scp"
        ret = nil
        Net::SCP.start(params[:host], params[:username], {port: params[:port].to_i, password: params[:password]}) do |scp|
          if params[:upload]
            scp.upload! params[:upload][:src], params[:upload][:dst], recursive: true
            Helper.log.info ['[SCP COMMAND]', "Successfully Uploaded", params[:upload][:src], params[:upload][:dst]].join(': ')
          end
          if params[:download]

            t_ret = scp.download! params[:download][:src], params[:download][:dst], recursive: true
            Helper.log.info ['[SCP COMMAND]', "Successfully Downloaded", params[:upload][:src], params[:upload][:dst]].join(': ')
            unless params[:download][:dst]
              ret = t_ret
            end
          end
        end
        ret
      end

      #####################################################
      # @!group Documentation
      #####################################################

      def self.description
        "Transfer files via SCP"
      end

      def self.available_options
        [
          FastlaneCore::ConfigItem.new(key: :username,
                                       short_option: "-u",
                                       env_name: "FL_SSH_USERNAME",
                                       description: "Username",
                                       is_string: true
                                      ),
          FastlaneCore::ConfigItem.new(key: :password,
                                       short_option: "-p",
                                       env_name: "FL_SSH_PASSWORD",
                                       description: "Password",
                                       optional: true,
                                       is_string: true
                                      ),
          FastlaneCore::ConfigItem.new(key: :host,
                                       short_option: "-H",
                                       env_name: "FL_SSH_HOST",
                                       description: "Hostname",
                                       is_string: true
                                      ),
          FastlaneCore::ConfigItem.new(key: :port,
                                       short_option: "-P",
                                       env_name: "FL_SSH_PORT",
                                       description: "Port",
                                       optional: true,
                                       default_value: "22",
                                       is_string: true
                                      ),
          FastlaneCore::ConfigItem.new(key: :upload,
                                       short_option: "-U",
                                       env_name: "FL_SCP_UPLOAD",
                                       description: "Upload",
                                       optional: true,
                                       is_string: false,
                                       type: Hash
                                      ),
          FastlaneCore::ConfigItem.new(key: :download,
                                       short_option: "-D",
                                       env_name: "FL_SCP_DOWNLOAD",
                                       description: "Download",
                                       optional: true,
                                       is_string: false,
                                       type: Hash
                                      )

        ]
      end

      def self.authors
        ["hjanuschka"]
      end

      def self.is_supported?(platform)
        true
      end
    end
  end
end