class Admin::Settings::ModulesController < Admin::Controller
  def show
    render_success :ok, json: module_type_props
  end

  def update
    setting = module_config(params[:type])

    if setting.update(module_config_params)
      render_success :ok, json: module_type_props
    else
      render_error :unprocessable_entity, errors: setting
    end
  end

  private
    def module_config(user_role)
      current_school.send("find_or_build_#{user_role}_module")
    end

    def module_config_params
      params.permit(
        :accounting,
        :admissions,
        :auction,
        :classroom,
        :covid,
        :discipline,
        :facility,
        :nursing,
        :service
      )
    end

    def module_type_props
      {
        employee: setting_props(module_config(:employee)),
        family: setting_props(module_config(:family)),
        student: setting_props(module_config(:student))
      }
    end

    def setting_props(setting)
      {
        accounting: setting.accounting,
        admissions: setting.admissions,
        auction: setting.auction,
        classroom: setting.classroom,
        covid: setting.covid,
        discipline: setting.discipline,
        facility: setting.facility,
        nursing: setting.nursing,
        service: setting.service
      }
    end
end
