class Provider::Stripe::SubscriptionEventProcessor < Provider::Stripe::EventProcessor
  Error = Class.new(StandardError)

  def process
    raise Error, "Family not found for Stripe customer ID: #{subscription.customer}" unless family

    family.subscription.update(
      stripe_id: subscription.id,
      status: subscription.status,
      interval: subscription_details.plan.interval,
      amount: subscription_details.plan.amount / 100.0, # Stripe returns cents, we report dollars
      currency: subscription_details.plan.currency.upcase,
      current_period_ends_at: Time.at(subscription_details.current_period_end),
      cancel_at_period_end: subscription.cancel_at_period_end
    )
  end

  private
    def family
      Family.find_by(stripe_customer_id: subscription.customer)
    end

    def subscription_details
      event_data.items.data.first
    end

    def subscription
      event_data
    end
end
