class ModuleConfig < ApplicationRecord
  audited

  belongs_to :school

  after_initialize :sync_legacy_modules

  after_save :send_notification

  def inactive_modules
    attributes.except!('id', 'type', 'school_id', 'created_at', 'updated_at')
      .filter { |_, v| !v }
      .keys
  end

  def active_modules
    attributes.except!('id', 'type', 'school_id', 'created_at', 'updated_at')
      .filter { |_, v| v }
      .keys
  end

  private
    def check_employee_module
      employee_module = school.find_or_build_employee_module

      changed.each do |prop|
        next unless self[prop] && !employee_module[prop]

        errors.add(prop, 'cannot be turned off for employees')
      end
    end

    def send_notification
      Notification::ModuleConfigJob.perform_async(school_id)
    end

    def sync_legacy_modules
      self.service = school.school_config.service_logs?
    end
end
