# frozen_string_literal: true

module Administrateurs
  class GroupeGestionnaireController < AdministrateurController
    before_action :retrieve_groupe_gestionnaire, only: [:show, :administrateurs, :gestionnaires, :commentaires, :create_commentaire]

    def show
      @unread_commentaires = current_administrateur.unread_commentaires?
    end

    def administrateurs
    end

    def gestionnaires
    end

    def commentaires
      @commentaire_seen_at = current_administrateur.commentaire_seen_at
      @commentaire = CommentaireGroupeGestionnaire.new
      current_administrateur.mark_commentaire_as_seen
    end

    def create_commentaire
      @commentaire = @groupe_gestionnaire.commentaire_groupe_gestionnaires.create(commentaire_params.merge(sender: current_administrateur))

      if @commentaire.errors.empty?
        commentaire_url = gestionnaire_groupe_gestionnaire_commentaire_url(@groupe_gestionnaire, @commentaire)
        @groupe_gestionnaire.gestionnaires.each do |gestionnaire|
          GroupeGestionnaireMailer.notify_new_commentaire_groupe_gestionnaire(@groupe_gestionnaire, @commentaire, @commentaire.sender_email, gestionnaire.email, commentaire_url).deliver_later
        end
        current_administrateur.mark_commentaire_as_seen
        flash.notice = "Message envoyé"
        redirect_to admin_groupe_gestionnaire_commentaires_path
      else
        flash.alert = @commentaire.errors.full_messages
        render :commentaires
      end
    end

    private

    def retrieve_groupe_gestionnaire
      id = current_administrateur.groupe_gestionnaire_id
      @groupe_gestionnaire = GroupeGestionnaire.find(id)

      Sentry.configure_scope do |scope|
        scope.set_tags(groupe_gestionnaire: @groupe_gestionnaire.id)
      end
    rescue ActiveRecord::RecordNotFound
      flash.alert = 'Groupe inexistant'
      redirect_to admin_procedures_path, status: 404
    end

    def commentaire_params
      params.require(:commentaire_groupe_gestionnaire).permit(:body)
    end
  end
end
