module Admissions::ApplicantApplicationBroadcastable
  extend ActiveSupport::Concern

  included do
    after_save :broadcast_application

    private
      def broadcast(id)
        ActionCable.server.broadcast(
          "components_admin_admissions_applicant_application_channel_#{id}",
          Admission::Applicants::ApplicationService.call(id, missing: true)
        )
      end

      def broadcast_application
        broadcast(is_a?(Admission::Applicant) ? id : applicant_id)
      rescue
        applicant_ids = family.admission_applicants.by_school_year(school_year.id).pluck(:id)
        applicant_ids.each { |a| broadcast(a) }
      end
  end
end
