module Licitacao
class AditivosDaAtaController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!, except: %i[editar_itens atualizar_itens confirmar voltar_etapa]
	before_action :set_aditivo_da_ata, only: [:show, :edit, :update, :destroy, :editar_itens, :atualiza_itens,:confirmar,:voltar_etapa]
	before_action :set_ata, only: [:create, :new]
	before_action :disponibiliza_dependencias

	# GET /licitacao/aditivos_da_ata/1
	def show
	end

	# GET /licitacao/aditivos_da_ata/new
	def new
		@aditivo_da_ata = @ata_de_registro_de_precos.aditivos_da_ata.new
	end

	# GET /licitacao/aditivos_da_ata/1/edit
	def edit
	end

	# POST /licitacao/aditivos_da_ata
	def create
		@aditivo_da_ata = @ata_de_registro_de_precos.aditivos_da_ata.new(aditivo_da_ata_params)
		@aditivo_da_ata.orcamento = orcamento_atual

		if @aditivo_da_ata.save
			redirect_to @aditivo_da_ata, notice: 'Aditivo da ata foi criado(a) com sucesso.'
		else
			render :new
		end
	end

	# PATCH/PUT /licitacao/aditivos_da_ata/1
	def update
		if @aditivo_da_ata.update(aditivo_da_ata_params)
			redirect_to @aditivo_da_ata, notice: 'Aditivo da ata foi atualizado(a) com sucesso.'
		else
			render :edit
		end
	end

	# DELETE /licitacao/aditivos_da_ata/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@aditivo_da_ata)
		redirect_to licitacao_ata_de_registro_de_precos_path(@aditivo_da_ata.ata_de_registro_de_precos), mensagem
	end

	#GET /licitacao/aditivos_da_ata/1/itens_do_aditivo
	def editar_itens
		return if bloqueia_usuario_com_base_em 'update'
		@aditivo_da_ata.itens_do_lote_da_ata.each do |item_do_lote|
			item_do_aditivo = @aditivo_da_ata.itens_do_aditivo_da_ata.find_by(item_do_lote_id: item_do_lote.id)
			@aditivo_da_ata.itens_do_aditivo_da_ata.build(item_do_lote_id: item_do_lote.id) unless item_do_aditivo.present?
		end
	end

		#PATCH /licitacao/aditivos_da_ata/1/atualiza_itens
	def atualiza_itens
		return if bloqueia_usuario_com_base_em 'update'
		if @aditivo_da_ata.update(aditivo_da_ata_params)
			redirect_to licitacao_aditivo_da_ata_path(@aditivo_da_ata), notice: "Itens atualizados com sucesso."
		else
			@itens_do_lote = @aditivo_da_ata.itens_do_lote_da_ata
			render :editar_itens
		end
	end

	def confirmar
		return if bloqueia_usuario_com_base_em 'update'
		if @aditivo_da_ata.confirmar!
			redirect_to @aditivo_da_ata, success: 'O aditivo foi confirmado com sucesso.'
		else
			redirect_to @aditivo_da_ata, alert: 'Não foi possível confirmar o aditivo. Por favor, confira se ela contém erros.'
		end
	end

	def voltar_etapa
		return if bloqueia_usuario_com_base_em 'update'
		if @aditivo_da_ata.voltar_etapa!
			redirect_to @aditivo_da_ata, success: 'O aditivo retornou etapa com sucesso.'
		else
			redirect_to @aditivo_da_ata, alert: 'Não foi possível voltar etapa do aditivo. Por favor, confira se ela contém erros.'
		end
	end

	private
	def set_aditivo_da_ata
		@aditivo_da_ata = AditivoDaAta.find( params[:id] )
	end

	def disponibiliza_dependencias
		@legislacoes = Base::Legislacao.where(esconder: false)
		@legislacoes = @legislacoes.joins(:legislacao_configuracoes).where(base_legislacoes_configuracoes: {aditivo_prazo: true})
	end
	
	def set_ata
		@ata_de_registro_de_precos = Licitacao::AtaDeRegistroDePrecos.find( params[:ata_de_registro_de_precos_id] )
	end

	# Permite apenas os parâmetros específicos
	def aditivo_da_ata_params
		params.require(:licitacao_aditivo_da_ata).permit(:ata_de_registro_de_precos_id, :orcamento_id, :data_do_aditivo, :legislacao_id, :justificativa, :data_inicio_vigencia, :data_final_vigencia, :status,
			:numero, :objeto, :modalidade,itens_do_aditivo_da_ata_attributes: [:id, :item_do_lote_id, :quantidade, :aditivo_da_ata_id, :valor_adicionado, :_destroy])
	end
end
end
