# frozen_string_literal: true

# Provides methods for Plan & PartnerPlan actions
class PlansService
  class << self
    def create(type, partner, params)
      if params[:group_id] == 'all'
        plans = type.constantize.create_for_all_groups(params)
        return false unless plans

        plans.each { |plan| partner.add_role :partner, plan } unless partner.nil?
        { plan_ids: plans.map(&:id) }
      else
        plan = type.constantize.new(params)
        return { errors: plan.errors.full_messages } unless plan.save

        partner&.add_role :partner, plan
        { plan_ids: [plan.id] }
      end
    rescue PaymentGatewayError => e
      { errors: e.message }
    end
  end
end