require "./access_token"

class OAuth2::AccessToken::Bearer < OAuth2::AccessToken
  def self.new(pull : JSON::PullParser) : self
    OAuth2::AccessToken.new(pull).as(self)
  end

  def token_type : String
    "Bearer"
  end

  def authenticate(request : HTTP::Request, tls)
    request.headers["Authorization"] = "Bearer #{access_token}"
  end

  def to_json(json : JSON::Builder) : Nil
    json.object do
      json.field "token_type", "bearer"
      json.field "access_token", access_token
      json.field "expires_in", expires_in
      json.field "refresh_token", refresh_token if refresh_token
      json.field "scope", scope if scope
    end
  end

  def_equals_and_hash access_token, expires_in, refresh_token, scope
end
