# frozen_string_literal: true

# A subscription added to the shopping cart
class CartItem::Subscription < CartItem::BaseItem
  attr_reader :start_at

  def initialize(plan, customer, start_at = nil)
    raise TypeError unless plan.is_a? Plan

    @plan = plan
    @customer = customer
    @start_at = start_at
    super
  end

  def plan
    raise InvalidGroupError if @plan.group_id != @customer.group_id

    @plan
  end

  def price
    amount = plan.amount
    elements = { plan: amount }

    { elements: elements, amount: amount }
  end

  def name
    @plan.base_name
  end

  def to_object
    ::Subscription.new(
      plan_id: @plan.id,
      statistic_profile_id: StatisticProfile.find_by(user: @customer).id,
      start_at: @start_at
    )
  end
end