class Threoze::PayMethodService < Threoze::ApplicationService
  def call
    case @action
    when :show
      json_parse(RestClient.get(url, headers.merge(params: key)))
    when :create
      RestClient.post(url, body, headers)
      @payload # Pass back PayJunction create payload on success
    when :update
      RestClient.patch("#{url}/#{@payload[:vaultId]}", body, headers)
      @payload
    when :destroy
      RestClient.delete("#{url}/#{@payload[:vault_id]}", headers.merge(params: key))
      { success: true }
    end
  rescue
    { errors: 'Something went wrong' }
  end

  private
    def endpoint
      'AcctPayMethod'
    end

    def pay_account
      @pay_account ||= Threoze::PayAccountService.call(@school)
    end

    def card_type
      case @payload[:accountType].downcase.to_sym
      when :checking
        1
      when :visa
        2
      when :mastercard
        3
      when :american_express
        4
      else
        0
      end
    end

    def key
      {
        key: threoze_secrets[:params_key],
        CCID: pay_account['CCID'],
        PaymentType: 2
      }
    end

    def body
      {
        APAID: pay_account['APAID'],
        ProcessorID: 7,
        ClientID: pay_account['ClientID'],
        MethodType: @payload[:type] == 'ACH' ? 2 : 1,
        VaultID: @payload[:vaultId],
        Name: @payload[:name],
        CardType: card_type,
        CardName: @payload[:accountType],
        ExpireMonth: @payload[:cardExpMonth],
        ExpireYear: @payload[:cardExpYear],
        Last4: @payload[:lastFour],
        DefaultMethod: 1,
        Address: @payload[:address][:address],
        City: @payload[:address][:city],
        State: @payload[:address][:state],
        Zip: @payload[:address][:zip]
      }.merge(key)
    end
end
