module Obra
class FiscalizacoesController < ApplicationController
	include ControllerConcern
	include ObraControllersConcern

	before_action :authenticate_usuario!
	before_action :autoriza_usuario!, expect: [:engenheiros_da_obra, :editar_fotos, :adiciona_fotos, :medicoes_da_obra, :engenheiros_da_obra, :menu_de_fiscalizacoes]
	before_action :set_fiscalizacao, only: [:show, :edit, :update, :destroy, :editar_fotos, :adiciona_fotos]
	before_action :disponibiliza_dependencias, only: [:new, :edit]

	# GET /obra/fiscalizacoes
	def index
		@q = Obra::Fiscalizacao.order(:id).search(params[:q])
		@fiscalizacoes = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
	end

	# GET /obra/fiscalizacoes/1
	def show
	end

	# GET /obra/fiscalizacoes/new
	def new
		@fiscalizacao = Obra::Fiscalizacao.new
	end

	# GET /obra/fiscalizacoes/1/edit
	def edit
	end

	# POST /obra/fiscalizacoes
	def create
		@fiscalizacao = Obra::Fiscalizacao.new(fiscalizacao_params)

		if @fiscalizacao.save
			redirect_to @fiscalizacao, notice: 'Fiscalização foi criado(a) com sucesso.'
		else
			disponibiliza_dependencias
			render :new
		end
	end

	# PATCH/PUT /obra/fiscalizacoes/1
	def update
		if @fiscalizacao.update( fiscalizacao_params )
			redirect_to @fiscalizacao, notice: 'Fiscalização foi atualizado(a) com sucesso.'
		else
			disponibiliza_dependencias
			render :edit
		end
	end

	# DELETE /obra/fiscalizacoes/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@fiscalizacao)
		redirect_to obra_fiscalizacoes_url, mensagem
	end

	def engenheiros_da_obra
		render json: Contabilidade::Obra.find(params[:obra_id]).engenheiros_da_obra.where(tipo: :fiscal), methods: :descricao
	end

	def medicoes_da_obra
		render json: Contabilidade::Obra.find(params[:obra_id]).medicoes_da_obra, methods: :descricao_da_medicao_com_periodo
	end

	def menu_de_fiscalizacoes
		bloqueia_usuario_com_base_em 'index', 'contabilidade/fiscalizacoes'
	end

	private
	def disponibiliza_dependencias
		@obras = Contabilidade::Obra.joins(:situacoes_da_obra).merge(Contabilidade::SituacaoDaObra.iniciadas_e_nao_concluidas)
		@engenheiros = []

		if params[:id].present?
			fiscalizacao = Obra::Fiscalizacao.find( params[:id] )
			@engenheiros = fiscalizacao.obra.engenheiros_da_obra.where(tipo: :fiscal)
			@medicoes = [ fiscalizacao.medicao_da_obra ]
		else
			@medicoes = @fiscalizacao.nil? ? [] : (@fiscalizacao.medicao_da_obra.present? ? [@fiscalizacao.medicao_da_obra] : (@fiscalizacao.obra.present? ? @fiscalizacao.obra.medicoes_da_obra : [] ))
			@engenheiros = @fiscalizacao.nil? ? [] : (@fiscalizacao.engenheiro_da_obra.present? ? [@fiscalizacao.engenheiro_da_obra] : (@fiscalizacao.obra.present? ? @fiscalizacao.obra.engenheiros_da_obra.where(tipo: :fiscal) : [] ))
		end
	end

	def set_fiscalizacao
		@fiscalizacao = Obra::Fiscalizacao.find( params[:id] )
	end

	# Permite apenas os parâmetros específicos
	def fiscalizacao_params
		params.require(:obra_fiscalizacao).permit(:data_da_fiscalizacao, :obra_id, :engenheiro_da_obra_id, :art,
			:possui_documentos, :possui_placa, :diario_atualizado, :providencias, :qualidade_da_execucao,
			:desempenho_da_construtora, :alteracao_justificada, :medicao_da_obra_id)
	end

end
end
