class Document < Base::Document
  attr_accessor :extension

  belongs_to :school, foreign_key: :SchoolID
  belongs_to :document_folder, foreign_key: :FolderID
  belongs_to :classroom, foreign_key: :ClassID

  has_many :class_assignment_attachments
  has_many :class_students, through: :classroom
  has_many :class_teachers, through: :classroom
  has_many :news_attachments, foreign_key: :DocumentID
  has_many :news_articles, through: :news_attachments

  after_find :set_extension

  scope :by_top_level, -> { where(document_folder_id: 0) }
  scope :by_school_level, -> { where(class_id: 0) }
  scope :exclude_internal, ->(flag) { where(internal: false) if flag }

  scope :by_access, ->(user) do
    case user.role
    when :employee
      left_joins(:class_teachers)
        .where('ClassTeachers.UserID = ? OR Documents.ClassID = 0', user.id)
    when :student
      left_joins(:class_students)
        .where('ClassStudents.StudentID = ? OR Documents.ClassID = 0', user.student_id)
    else
      student_ids = user.family.students.pluck(:id)
      left_joins(:class_students)
        .merge(ClassStudent.by_students(student_ids))
        .or(left_joins(:class_students).where('Documents.ClassId = 0'))
    end
  end

  def file_path
    school.dir_path.join(class_id.to_s, 'Docs', filename)
  end

  private
    def set_extension
      name_extension = File.extname(name).gsub(/\W/, '')
      self.extension =  if name_extension.present?
        name_extension
      elsif google_id
        'google'
      end
    end
end
