class Acme::Client::Resources::Authorization

def assign_attributes(url:, status:, expires:, challenges:, identifier:, wildcard: false)

def assign_attributes(url:, status:, expires:, challenges:, identifier:, wildcard: false)
  @url = url
  @identifier = identifier
  @domain = identifier.fetch('value')
  @status = status
  @expires = expires
  @challenges = challenges
  @wildcard = wildcard
end

def challenges

def challenges
  @challenges.map do |challenge|
    initialize_challenge(challenge)
  end
end

def deactivate

def deactivate
  assign_attributes(**@client.deactivate_authorization(url: url).to_h)
  true
end

def dns01

def dns01
  @dns01 ||= challenges.find { |challenge|
    challenge.is_a?(Acme::Client::Resources::Challenges::DNS01)
  }
end

def http01

def http01
  @http01 ||= challenges.find { |challenge|
    challenge.is_a?(Acme::Client::Resources::Challenges::HTTP01)
  }
end

def initialize(client, **arguments)

def initialize(client, **arguments)
  @client = client
  assign_attributes(**arguments)
end

def initialize_challenge(attributes)

def initialize_challenge(attributes)
  arguments = {
    type: attributes.fetch('type'),
    status: attributes.fetch('status'),
    url: attributes.fetch('url'),
    token: attributes.fetch('token', nil),
    error: attributes['error']
  }
  Acme::Client::Resources::Challenges.new(@client, **arguments)
end

def reload

def reload
  assign_attributes(**@client.authorization(url: url).to_h)
  true
end

def to_h

def to_h
  {
    url: url,
    identifier: identifier,
    status: status,
    expires: expires,
    challenges: @challenges,
    wildcard: wildcard
  }
end