class Threoze::BillingService < Threoze::ApplicationService
  def call
    case @action
    when :show
      response = RestClient.get(uri, headers)
    when :update
      response = RestClient.post(uri, build_props, headers)
    end

    resp = JSON.parse(response.body)
    resp['billingcountry_id'] = country_id(resp)

    resp
  rescue RestClient::Exception => e
    JSON.parse(e.response.body)
  end

  private
    def country_id(resp)
      IsoCountry.find_by(name: resp['billingcountry'])&.id
    end

    def country_name
      IsoCountry.find_by(id: @payload[:billingcountry_id])&.name
    end

    def build_props
      {
        billingname: @payload[:billingname],
        billingaddress1: @payload[:billingaddress1],
        billingaddress2: @payload[:billingaddress2],
        billingcity: @payload[:billingcity],
        billingcountry: country_name,
        billingemail: @payload[:billingemail],
        billingstate: @payload[:billingstate],
        billingzip: @payload[:billingzip]
      }
    end

    def uri
      "#{base_uri}/ContactBillingInfo/#{customer}"
    end
end
