module GestaoDeEstoque
	class ControleDeExtintoresController < ApplicationController
		include ControllerConcern

		before_action :authenticate_usuario!
		before_action :autoriza_usuario!, except: [:disponibiliza_dependencias]
		before_action :set_controle_de_extintor, only: [:show, :edit, :update, :destroy, :editar_manutencoes, :atualizar_manutencoes]
		before_action :disponibiliza_dependencias, only: [:index, :new, :edit]

		# GET /gestao_de_estoque/controle_de_extintores
		def index
			@q = GestaoDeEstoque::ControleDeExtintor.order(:id).search(params[:q])
			@controle_de_extintores = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
		end

		# GET /gestao_de_estoque/controle_de_extintores/1
		def show
		end

		# GET /gestao_de_estoque/controle_de_extintores/new
		def new
			@controle_de_extintor = GestaoDeEstoque::ControleDeExtintor.new
		end

		# GET /gestao_de_estoque/controle_de_extintores/1/edit
		def edit
		end

		# POST /gestao_de_estoque/controle_de_extintores
		def create
			@controle_de_extintor = GestaoDeEstoque::ControleDeExtintor.new(controle_de_extintor_params)

			if @controle_de_extintor.save
				redirect_to @controle_de_extintor, notice: 'Controle de extintor foi criado(a) com sucesso.'
			else
				disponibiliza_dependencias
				render :new
			end
		end

		# PATCH/PUT /gestao_de_estoque/controle_de_extintores/1
		def update
			if @controle_de_extintor.update(controle_de_extintor_params)
				redirect_to @controle_de_extintor, notice: 'Controle de extintor foi atualizado(a) com sucesso.'
			else
				disponibiliza_dependencias
				render :edit
			end
		end

		# DELETE /gestao_de_estoque/controle_de_extintores/1
		def destroy
			mensagem = apaga_e_retorna_mensagem(@controle_de_extintor)
			redirect_to gestao_de_estoque_controle_de_extintores_url, mensagem
		end

		def editar_manutencoes
			@manutencao_do_extintor = @controle_de_extintor.manutencoes_do_extintor.new()
		end

		def atualizar_manutencoes
			@manutencao_do_extintor = @controle_de_extintor.manutencoes_do_extintor.new(manutancao_do_extintor_params)

			if @manutencao_do_extintor.save
				redirect_to @controle_de_extintor, notice: "Manutenção cadastrada com sucesso"
			else
				flash[:alert] = "Validação falhou"
				render :editar_manutencoes
			end
		end

		private
		def set_controle_de_extintor
			@controle_de_extintor = GestaoDeEstoque::ControleDeExtintor.find(params[:id])
		end

		def disponibiliza_dependencias
			@tipos_de_extintores = GestaoDeEstoque::ControleDeExtintor.tipos_de_extintores
			@prazos_para_inspecao = GestaoDeEstoque::ControleDeExtintor.prazos_para_inspecao
			@prazos_para_recarga = GestaoDeEstoque::ControleDeExtintor.prazos_para_recarga
			@almoxarifados = GestaoDeEstoque::Almoxarifado.order(id: :desc)
		end

		# Permite apenas os parâmetros específicos
		def controle_de_extintor_params
			params.require(:gestao_de_estoque_controle_de_extintor)
				.permit(
					:numero_do_extintor,
					:data_de_fabricacao,
					:data_da_ultima_manutencao,
					:data_da_ultima_recarga,
					:tipo_de_extintor,
					:prazo_para_inspecao,
					:prazo_para_recarga,
					:almoxarifado_id
				)
		end

		def manutancao_do_extintor_params
			params.require(:gestao_de_estoque_manutencao_do_extintor)
				.permit(
						:id,
						:_destroy,
						:controle_de_extintor_id,
						:data_da_manutencao,
						:tipo_de_manutencao,
						:tipo_de_prazo,
						:prazo,
						:empresa_responsavel
				)
		end
	end
end
