class User::MenusController < ApplicationController
  def show
    render_success :ok, json: menu_props
  end

  private
    def school_config
      @school_config ||= current_school.school_config
    end

    def menu_permissions
      @menu_permissions ||= school_config.menu_permissions
    end

    def directory_permissions
      @directory_permissions ||= school_config.directory_permissions(role)
    end

    def covid_config
      @covid_config ||= current_school.find_or_build_covid_config
    end

    def directory_permission?(directory)
      return true if role == :employee

      permission = directory_permissions[directory]
      directory == :family ? permission : permission[:directory]
    end

    def pan_enabled?
      return true if role == :employee

      role == :family ? school_config.family_pan? : school_config.student_pan?
    end

    def covid_enabled?
      case role
      when :employee
        covid_config.employee_access
      when :family
        covid_config.parent_access
      end
    end

    def classroom_enabled?
      case role
      when :employee
        !current_school.find_or_build_classroom_config.classrooms_closed?
      when :family
        school_config.family_schedules?
      when :student
        school_config.student_schedules?
      end
    end

    def email_config
      current_school.communication_smtp_config || current_school.build_communication_smtp_config
    end

    def legacy_accounting
      return false unless role == :family

      school_config.accounting || school_config.cafeteria ||
        school_config.daycare || school_config.donor
    end

    def service_setting
      @service_setting ||= current_school.find_or_build_service_setting
    end

    def menu_props
      {}.tap do |props|
        props[:legacy_accounting] = legacy_accounting
        props[:news] = menu_permissions[:news]
        props[:calendar] = menu_permissions[:calendar]
        props[:documents] = menu_permissions[:documents]
        props[:classroom] = classroom_enabled?
        props[:admissions] = school_config.admissions?
        props[:family_directory] = directory_permission?(:family)
        props[:employee_directory] = directory_permission?(:employee)
        props[:pan] = pan_enabled?
        props[:covid] = covid_enabled?
        props[:covid_config] = covid_config.screen if role == :employee
        props[:batch_email] = email_config.status?
        props[:online_forms] = school_config.online_forms?
        props[:time_card] = school_config.time_card
        props[:service_family] = service_setting.track_family? || service_setting.track_both?
        props[:service_student] = service_setting.track_student? || service_setting.track_both?
      end
    end
end
