module Base
  class ConfiguracoesDeFeriadosController < ApplicationController
    include ControllerConcern
    before_action :authenticate_usuario!
    before_action :autoriza_usuario!
    before_action :set_configuracao_de_feriado, only: [:show, :edit, :update, :destroy]

    # GET /base/configuracoes_de_feriados
    def index
      @q = ::Base::ConfiguracaoDeFeriado.ransack(params[:q])
      @configuracoes_de_feriados = @q.result(distinct: false).order(ano_de_referencia: :desc, mes_de_referencia: :asc).paginate(page: params[:page], per_page: 15)
      @datas_de_feriados = ConfiguracaoDeFeriado.all.order(:mes_de_referencia)

      respond_to do |format|
        format.html
        format.json { render json: @datas_de_feriados }
      end
    end

    # GET /base/configuracoes_de_feriados/new
    def new
      @configuracao_de_feriado = Base::ConfiguracaoDeFeriado.new
    end

    # GET /base/configuracoes_de_feriados/1/edit
    def edit
    end

    # POST /base/configuracoes_de_feriados
    def create
      @configuracao_de_feriado = Base::ConfiguracaoDeFeriado.new(configuracao_de_feriado_params.merge(orcamento_id: id_do_orcamento))

      if @configuracao_de_feriado.save
        redirect_to base_configuracoes_de_feriados_path, notice: 'Configuracao de feriado foi criado(a) com sucesso.'
      else
        render :new
      end
    end

    # PATCH/PUT /base/configuracoes_de_feriados/1
    def update
      if @configuracao_de_feriado.update(configuracao_de_feriado_params)
        redirect_to base_configuracoes_de_feriados_path, notice: 'Configuracao de feriado foi atualizado(a) com sucesso.'
      else
        render :edit
      end
    end

    # DELETE /base/configuracoes_de_feriados/1
    def destroy
      mensagem = apaga_e_retorna_mensagem(@configuracao_de_feriado)
      redirect_to base_configuracoes_de_feriados_url, mensagem
    end

    private

    def set_configuracao_de_feriado
      @configuracao_de_feriado = ConfiguracaoDeFeriado.find(params[:id])
    end

    # Permite apenas os parâmetros específicos
    def configuracao_de_feriado_params
      params.require(:base_configuracao_de_feriado).permit(:orcamento_id, :data_do_feriado, :descricao_do_feriado, :mes_de_referencia, :ano_de_referencia, :tipo_de_feriado)
    end

    def id_do_orcamento
      Orcamento.where(exercicio: configuracao_de_feriado_params[:data_do_feriado].split('/')[2]).pluck(:id).first
    end
  end
end

