require 'highline/import'

module HaveAPI::Fs::Auth
  class Token < Base
    register :token

    def self.use?(opts)
      opts[:token]
    end

    def setup
      @user = @opts[:user] || @cfg[:user]
      @passwd = @opts[:password] || @cfg[:password]
      @token = @opts[:token] || @cfg[:token]
    end

    def validate
      return if @token

      @user ||= ask('User name: ') { |q| q.default = nil }.to_s

      @passwd ||= ask('Password: ') do |q|
        q.default = nil
        q.echo = false
      end.to_s
    end

    def authenticate(client)
      if @token
        opts = {token: @token}

      else
        opts = {user: @user, password: @passwd}
      end

      client.authenticate(:token, opts)
    end
  end
end