# frozen_string_literal: true

# Provides helper methods to create an Availability with multiple occurrences
class Availabilities::CreateAvailabilitiesService
  def create(availability, occurrences = [])
    availability.update_attributes(occurrence_id: availability.id)

    occurrences.each do |o|
      next if availability.start_at == o[:start_at] && availability.end_at == o[:end_at]

      Availability.new(
        start_at: o[:start_at],
        end_at: o[:end_at],
        available_type: availability.available_type,
        is_recurrent: availability.is_recurrent,
        period: availability.period,
        nb_periods: availability.nb_periods,
        end_date: availability.end_date,
        occurrence_id: availability.occurrence_id,
        machine_ids: availability.machine_ids,
        training_ids: availability.training_ids,
        space_ids: availability.space_ids,
        tag_ids: availability.tag_ids,
        nb_total_places: availability.nb_total_places,
        slot_duration: availability.slot_duration,
        plan_ids: availability.plan_ids
      ).save!
    end
  end
end