class Notification::Service::FamilyLogJob
  include Sidekiq::Worker

  def perform(id, status)
    log = Service::FamilyLog.find(id)
    school = log.school
    family_config = school.find_or_build_family_module
    employee_config = school.find_or_build_employee_module
    service_setting = school.find_or_build_service_setting

    if status.to_sym == :approved
      return unless family_config.service? &&
        (service_setting.track_family? || service_setting.track_both?)

      family_user_ids = [log.family&.user&.id]
      family_user_ids += log.family.primary_contacts.pluck(:user_id)
      family_users = school.users
        .joins(:family_notification_config)
        .where(id: family_user_ids)
        .where.not(family_notification_configs: { service: :none })

      family_push = []
      family_app = []

      family_users.each do |user|
        config = user.find_or_build_family_notification_config
        family_push << user.id if config.service_both? || config.service_push?

        family_app << user.id if config.service_both? || config.service_app?
      end

      Notification::OneSignalJob.perform_async(
        family_push,
        { en: 'Service log has been approved' },
        { en: 'Service Log Approved' },
        '/family?task=service_family_log'
      )
    elsif status.to_sym == :pending
      return unless employee_config.service?

      employee_users = school.employees
        .joins(:employee_notification_config)
        .is_current(true)
        .where.not(employee_notification_configs: { service: :none })

      employee_push = []
      employee_app = []

      employee_users.each do |user|
        config = user.find_or_build_employee_notification_config
        employee_push << user.id if config.service_both? || config.service_push?

        employee_app << user.id if config.service_both? || config.service_app?
      end

      Notification::OneSignalJob.perform_async(
        employee_push,
        { en: 'Service log has been created' },
        { en: 'Service Log created' },
        "/employee?task=service_family_log&id=#{log.id}"
      )
    end
  end
end
