class GestaoDeEstoque::InicioController < ApplicationController
  include TradutorConcern
  include ControllerConcern
  include GestaoDeEstoqueControllerConcern

  before_action :authenticate_usuario!
	before_action :autoriza_usuario!

  def index
    @configuracao = Configuracao.includes(:parametrizacao_modulos).last
    @ordens_de_compra = gestao_de_estoque_atual.ordens_de_compra.where(status: Licitacao::OrdemDeCompra.status[:enviado_para_almoxarifado]).all
    @demandas_programadas = Administrativo::RequisicaoDeMaterial.demanda_programada.enviado_ao_almoxarifado.all
    @recebimento_de_material = GestaoDeEstoque::RecebimentoDeMaterial.devolucao_estorno.where(orcamento_id: contexto_atual.id)
    @requisicao_de_material = gestao_de_estoque_atual.requisicoes_de_materiais.where(status: Administrativo::RequisicaoDeMaterial.status[:enviado_ao_almoxarifado]).all
    @consumos = GestaoDeEstoque::Consumo.enviado_ao_almoxarifado.all

    estoques = GestaoDeEstoque::MovimentacaoDoEstoque.where('(data_da_movimentacao >= ? AND quantidade_saida > 0) OR (data_da_movimentacao >= ?)', 
      (Date.today - @configuracao.prazo_sem_movimentacao_de_material.to_i), (Date.today - @configuracao.prazo_sem_movimentacao_de_material.to_i)).distinct.map(&:estoque_id)
		@estoque_parado = GestaoDeEstoque::Estoque.where('id not in (?)', estoques)
    @controle = GestaoDeEstoque::ControleDoAlmoxarifado.where(orcamento: contexto_atual).all
    @controle_anual = GestaoDeEstoque::ControleDoAlmoxarifado.where.not(ano_encerramento: nil).where(orcamento: contexto_atual.id)
  end


  def encerramento
    @encerramento = GestaoDeEstoque::ControleDoAlmoxarifado.new(orcamento_id: contexto_atual.id)
  end

  def criar_encerramento
    @encerramento = GestaoDeEstoque::ControleDoAlmoxarifado.new(encerramento_params)
    if @encerramento.save
      redirect_to gestao_de_estoque_inicio_path, notice: 'Encerramento efetuado com sucesso.'
    else
      render :encerramento
    end
  end

  def deleta_encerramento
    encerramento = GestaoDeEstoque::ControleDoAlmoxarifado.find_by(id: params[:id])
    mensagem = apaga_e_retorna_mensagem(encerramento)
    redirect_to gestao_de_estoque_inicio_path, mensagem
  end

  def encerramento_exercicio
    @encerramento = GestaoDeEstoque::ControleDoAlmoxarifado.new(orcamento_id: contexto_atual.id)
  end

  def criar_encerramento_exercicio
    @encerramento = GestaoDeEstoque::ControleDoAlmoxarifado.new(encerramento_params)
    if @encerramento.save
      redirect_to gestao_de_estoque_inicio_path, notice: 'Encerramento efetuado com sucesso.'
    else
      render :encerramento
    end
  end

  def deleta_encerramento_exercicio
    encerramento = GestaoDeEstoque::ControleDoAlmoxarifado.find_by(id: params[:id])
    mensagem = apaga_e_retorna_mensagem(encerramento)
    redirect_to gestao_de_estoque_inicio_path, mensagem
  end

  private
  # Permite apenas os parâmetros específicos
  def encerramento_params
    params.require(:gestao_de_estoque_controle_do_almoxarifado).permit(:data_de_encerramento, :orcamento_id, :ano_encerramento)
  end
end
