# frozen_string_literal: true

module CoinsPaid
  class Address
    module Types
      include Dry.Types()
    end

    class Data < Dry::Struct
      attribute :foreign_id, Types::Coercible::String
      attribute :currency, Types::String
      attribute :convert_to, Types::String
    end

    include Dry::Initializer.define -> do
      param :request_data, Data
    end

    def call
      CoinsPaidAddress.find_or_create_by!(request_data.attributes.slice(:foreign_id, :currency)) do |address|
        response = CoinsPaid::API.take_address(request_data.attributes)
        address.assign_attributes(response.attributes)
      end
    end
  end
end