class GroupeGestionnaire < ApplicationRecord
  has_many :administrateurs
  has_many :commentaire_groupe_gestionnaires
  has_many :follow_commentaire_groupe_gestionnaires
  has_and_belongs_to_many :gestionnaires

  has_ancestry

  def add_gestionnaire(gestionnaire)
    return if gestionnaire.nil?
    return if in?(gestionnaire.groupe_gestionnaires)

    gestionnaires << gestionnaire
  end

  def add_administrateur(administrateur)
    return if administrateur.nil?
    return if id == administrateur.groupe_gestionnaire_id

    administrateurs << administrateur
  end

  def can_be_deleted?(current_user)
    (gestionnaires.empty? || (gestionnaires == [current_user])) && administrateurs.empty? && children.empty?
  end

  def parent_name
    parent&.name
  end

  def current_commentaires_groupe_and_children_commentaires_groupe
    commentaires = CommentaireGroupeGestionnaire.where(groupe_gestionnaire_id: id, sender_type: "Administrateur")
    unless child_ids.empty?
      commentaires = commentaires.or(CommentaireGroupeGestionnaire.where(groupe_gestionnaire_id: child_ids, sender_type: "Gestionnaire"))
    end
    commentaires
  end

  def gestionnaire_commentaires(gestionnaire)
    commentaires = self.current_commentaires_groupe_and_children_commentaires_groupe
    if self.parent_id && !gestionnaire.groupe_gestionnaires.exists?(id: self.parent_id)
      commentaires = commentaires.or(CommentaireGroupeGestionnaire.where(groupe_gestionnaire_id: self.id, sender: gestionnaire))
    end
    commentaires
  end
end