# frozen_string_literal: true

require_relative 'cart_item'

# A payment schedule applied to plan in the shopping cart
class CartItem::PaymentSchedule < ApplicationRecord
  self.table_name = 'cart_item_payment_schedules'

  belongs_to :customer_profile, class_name: 'InvoicingProfile'
  belongs_to :coupon
  belongs_to :plan

  def customer
    customer_profile.user
  end

  def schedule(total, total_without_coupon)
    schedule = if requested && plan&.monthly_payment
                 PaymentScheduleService.new.compute(plan, total_without_coupon, customer, coupon: coupon.coupon, start_at: start_at)
               else
                 nil
               end

    total_amount = if schedule
                     schedule[:items][0].amount
                   else
                     total
                   end

    { schedule: schedule, total: total_amount }
  end

  def type
    'subscription'
  end

  def valid?(_all_items)
    return true unless requested && plan&.monthly_payment

    if plan&.disabled
      errors.add(:plan, I18n.t('cart_item_validation.plan'))
      return false
    end
    true
  end
end