class Stripe::CheckoutSessionService < Stripe::ApplicationService
  def call
    resp = case @action
    when :show
      path = "#{url}/#{@id}"
      rest_client_request(
        :get,
        path,
        @model, 'Checkout Sessions', additional_headers: additional_headers)
    when :create
      rest_client_request(:post, url, @model, 'Checkout Sessions', body: body, additional_headers: additional_headers)
    end

    JSON.parse(resp.body)
  rescue RestClient::Exception => e
    Rails.logger.error "Stripe::CheckoutSessionService error: #{e.message}"
  end

  private
    def endpoint
      'checkout/sessions'
    end

    def additional_headers
      return {} unless @options[:stripe_account]

      { 'Stripe-Account': @options[:stripe_account] }
    end

    def body
      {}.tap do |props|
        props[:mode] = :payment
        props[:ui_mode] = :embedded
        props[:currency] = :usd
        props[:redirect_on_completion] = :never
        props[:line_items] = [@options[:line_item]]
        props[:payment_intent_data] = @options[:payment_intent] if @options[:payment_intent]
      end
    end
end
