# frozen_string_literal: true

# Provides methods for SupportingDocumentFile
class SupportingDocumentFileService
  def self.list(operator, filters = {})
    files = []
    if filters[:user_id].present? && (operator.privileged? || filters[:user_id].to_i == operator.id)
      files = SupportingDocumentFile.where(user_id: filters[:user_id])
    end
    files
  end

  def self.create(supporting_document_file)
    saved = supporting_document_file.save

    if saved
      user = User.find(supporting_document_file.user_id)
      all_files_are_upload = true
      user.group.supporting_document_types.each do |type|
        file = type.supporting_document_files.find_by(user_id: supporting_document_file.user_id)
        all_files_are_upload = false unless file
      end
      if all_files_are_upload
        NotificationCenter.call type: 'notify_admin_user_supporting_document_files_created',
                                receiver: User.admins_and_managers,
                                attached_object: user
      end
    end
    saved
  end

  def self.update(supporting_document_file, params)
    updated = supporting_document_file.update(params)
    if updated
      user = supporting_document_file.user
      all_files_are_upload = true
      user.group.supporting_document_types.each do |type|
        file = type.supporting_document_files.find_by(user_id: supporting_document_file.user_id)
        all_files_are_upload = false unless file
      end
      if all_files_are_upload
        NotificationCenter.call type: 'notify_admin_user_supporting_document_files_updated',
                                receiver: User.admins_and_managers,
                                attached_object: supporting_document_file
      end
    end
    updated
  end
end