class GestaoDeEstoque::MembrosDaComissaoController < ApplicationController
  include ControllerConcern

  before_action :authenticate_usuario!
  before_action :autoriza_usuario!, except: [:extinguir_membro]
  before_action :set_membro_da_comissao, only: [:edit, :update, :destroy, :extinguir_membro]
  before_action :set_comissao, only: [:new, :create, :extinguir_membro]
  before_action :disponibiliza_dependencias, only: [:new, :edit]

  def new
    @membro_da_comissao = @comissao.membros_da_comissao.new
  end

  def edit
    redirect_to @membro_da_comissao.comissao, alert: 'Não é possivel editar. Membro da comissão extinto' and return if @membro_da_comissao.data_de_saida.present?
  end

  def create
    @membro_da_comissao = @comissao.membros_da_comissao.new(membro_da_comissao_params)

    if @membro_da_comissao.save
      redirect_to @membro_da_comissao.comissao, notice: 'Membro da comissão foi criado(a) com sucesso.'
    else
      disponibiliza_dependencias
      render :new
    end
  end

  def update
    if @membro_da_comissao.update(membro_da_comissao_params)
      redirect_to @membro_da_comissao.comissao, notice: 'Membro da comissão foi atualizado(a) com sucesso.'
    else
      disponibiliza_dependencias
      render :edit
    end
  end

  def destroy
    mensagem = apaga_e_retorna_mensagem(@membro_da_comissao)
    redirect_to @membro_da_comissao.comissao, mensagem
  end

  def extinguir_membro
    @membro_da_comissao.update(data_de_saida: Date.today)
    redirect_to @membro_da_comissao.comissao, notice: 'Membro da comissão foi extinto(a) com sucesso.'
  end

  private
  def set_membro_da_comissao
    @membro_da_comissao = GestaoDeEstoque::MembroDaComissao.find(params[:id])
  end

  def disponibiliza_dependencias
    @agentes_publicos_municipais = Base::AgentePublicoMunicipal.includes(:pessoa).all
		@tipos_de_membros = GestaoDeEstoque::MembroDaComissao.tipos_de_membros
  end

  def set_comissao
    @comissao = GestaoDeEstoque::Comissao.find(params[:comissao_id])
  end

  def membro_da_comissao_params
    params.require(:gestao_de_estoque_membro_da_comissao).permit(
      :comissao_id,
      :agente_publico_municipal_id,
      :tipo_de_membro,
      :data_de_admissao,
      :data_de_saida
    )
  end
end
