class School::Legacy::DocumentsController < ApplicationController
  def index
    data =
      if params[:scope].to_sym == :class
        classrooms.map do |classroom|
          children = document_tree(folders_by_parent_id(classroom), top_level_documents(classroom))
          { id: "class_#{classroom.id}", name: classroom.name, children: children }
        end
      else
        document_tree(folders_by_parent_id, top_level_documents)
      end
    render_success :ok, json: data
  end

  def show
    if document
      send_file document.file_path, filename: document.name
    else
      render_error :not_found
    end
  end

  private
    def document
      @document ||= current_school.documents.by_access(current_user).find_by(id: params[:id])
    end

    def folders_by_parent_id(classroom=nil)
      folders =
        if classroom
          classroom.document_folders
        else
          current_school.document_folders.by_school_level
        end

      folders.preload(:documents).exclude_private(role != :employee).group_by(&:parent_id)
    end

    def top_level_documents(classroom=nil)
      documents = classroom ? classroom.documents : current_school.documents.by_school_level
      documents.by_top_level.exclude_internal(role != :employee)
    end

    def classrooms
      class_ids = scoped_role.documents.distinct.pluck(:class_id)
      scoped_role.classrooms
        .where(id: class_ids)
        .by_parent_viewable(role != :employee ? true : nil)
        .distinct
    end

    def document_tree(folders, documents)
      DocumentFolder.document_tree(folders, documents, role != :employee)
    end
end
