class Contabilidade::SituacoesDaObraController < ApplicationController
	include ControllerConcern
	include Contabilidade::ObrasHelper

	before_action -> { verifica_modulo_na_sessao(["contabilidade", "administrativo", "obra"]) }
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_situacao_da_obra, only: [:show, :edit, :update, :destroy]
	before_action :disponibiliza_dependencias, only: [:new, :edit]

	def show
	end

	def new
		@obra = Contabilidade::Obra.find( params[:obra_id] )
		@situacao_da_obra = @obra.situacoes_da_obra.new

		unless @obra.engenheiro_responsavel.present?
			redirect_to rota_obra(@situacao_da_obra.obra), alert: 'Para alterar o status deve-se primeiro cadastrar o engenheiro responsável.'
		end
	end

	def create
		@obra = Contabilidade::Obra.find( params[:obra_id] )
		@situacao_da_obra = @obra.situacoes_da_obra.new( situacao_da_obra_params )
		define_tombamento_na_obra
		if @situacao_da_obra.save
			redirect_to rota_obra(@situacao_da_obra.obra), notice: 'Status adicionado com sucesso.'
		else
			disponibiliza_dependencias
			render :new
		end
	end

	def edit
		@obra = @situacao_da_obra.obra
	end

	def update
		if @situacao_da_obra.update( situacao_da_obra_params )
			redirect_to rota_obra(@situacao_da_obra.obra), notice: 'Status atualizado com sucesso.'
		else
			@obra = @situacao_da_obra.obra
			disponibiliza_dependencias
			render :edit
		end
	end

	def destroy
		mensagem = apaga_e_retorna_mensagem(@situacao_da_obra)
		redirect_to rota_obra(@situacao_da_obra.obra), mensagem
	end

	private
	def set_situacao_da_obra
		@situacao_da_obra = Contabilidade::SituacaoDaObra.find( params[:id] )
	end

	def disponibiliza_dependencias
		@status_da_obra = Contabilidade::SituacaoDaObra.tipos_de_status_da_obra
		@tipos_de_termo = Contabilidade::SituacaoDaObra.tipo_de_termos
	end

	def define_tombamento_na_obra
		@situacao_da_obra.obra.tombo_do_terreno = params[:tombo_do_terreno_situacao]
		@situacao_da_obra.obra.tombo_da_construcao = params[:tombo_da_construcao_situacao]
		@situacao_da_obra.obra.save
	end

	# Permite apenas os parâmetros específicos
	def situacao_da_obra_params
		params.require(:contabilidade_situacao_da_obra).permit(
			:obra_id, :engenheiro_da_obra_id, :tipo_de_termo,
			:data_da_situacao, :observacoes, :tipo_de_status_da_obra, :data_do_termo_de_conclusao, :tombo_do_bem, :tombo_do_terreno_situacao, :tombo_da_construcao_situacao
		)
	end
end
