module Obra
	class Obra::GarantiasDaObraController < ApplicationController
		include ControllerConcern
		include ObraControllersConcern

		before_action :authenticate_usuario!
		before_action :autoriza_usuario!, except: [:devolver, :retornar_para_aberta]
		before_action :set_obra, only: [:new]
		before_action :set_garantia_da_obra, only: [:show, :edit, :update, :destroy, :devolver, :retornar_para_aberta]
		before_action :disponibiliza_dependencias, only: [:new, :edit]

		# GET /obra/garantias_da_obra/1
		def show
		end

		# GET /obra/garantias_da_obra/new
		def new
			@garantia_da_obra = @obra.garantias_da_obra.new
		end

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

		# POST /obra/garantias_da_obra
		def create
			@garantia_da_obra = Obra::GarantiaDaObra.new(garantia_da_obra_params)
			if @garantia_da_obra.save
				redirect_to administrativo_obra_path(@garantia_da_obra.obra, tab: "garantias_da_obra"), notice: 'Garantia da obra foi criado com sucesso.'
			else
				disponibiliza_dependencias
				render :new
			end
		end

		# PATCH/PUT /obra/garantias_da_obra/1
		def update
			if @garantia_da_obra.update( garantia_da_obra_params )
				redirect_to administrativo_obra_path(@garantia_da_obra.obra, tab: "garantias_da_obra"), notice: 'Garantia da obra foi atualizado com sucesso.'
			else
				disponibiliza_dependencias
				render :edit
			end
		end

		# DELETE /obra/garantias_da_obra/1
		def destroy
			mensagem = apaga_e_retorna_mensagem(@garantia_da_obra)
			redirect_to administrativo_obra_path(@garantia_da_obra.obra, tab: "garantias_da_obra"), mensagem
		end

		# PATCH /obra/garantias_da_obra/1/devolver
		def devolver
			if @garantia_da_obra.devolvida!
				redirect_to @garantia_da_obra, success: 'Garantia marcada como Devolvida com sucesso.'
			else
				redirect_to @garantia_da_obra, alert: 'Não foi possivel marcar como devolvida.'
			end
		end

		# PATCH /obra/garantias_da_obra/1/retornar_para_aberto
		def retornar_para_aberta
			if @garantia_da_obra.retornar_para_aberta!
				redirect_to @garantia_da_obra, success: 'A Garantia foi retornado para Em Aberta.'
			else
				redirect_to @garantia_da_obra, alert: 'Não foi possível retornar a Garantia para Em Aberta. Por favor, confira se ela contém erros'
			end
		end

		private

		def set_garantia_da_obra
			@garantia_da_obra = Obra::GarantiaDaObra.find( params[:id] )
		end

		def set_obra
			@obra = Contabilidade::Obra.find(params[:obra_id])
		end

		def disponibiliza_dependencias
			@formas_de_garantia = Obra::GarantiaDaObra.formas_de_garantia
		end

		# Permite apenas os parâmetros específicos
		def garantia_da_obra_params
			params.require(:obra_garantia_da_obra).permit(:obra_id, :nome_do_titulo, :numero_da_apolice,
				:conta_corrente, :nome_do_banco, :nome_da_seguradora, :data_do_deposito,
				:data_de_resgate, :forma_de_garantia, :quantidade_de_dias_de_vigencia,
				:valor_do_caucao, :valor_do_premio, :valor_fianca)
		end
	end
end
