module Licitacao
class PessoasDoPedidoController < ApplicationController
	include LicitacaoHelper
	include ControllerConcern
	include LicitacaoControllersConcern
	skip_before_action :verifica_se_tem_orcamento_na_sessao!, only: [:cotar, :enviar_cotacao, :show_cotacao], raise: false
	skip_before_action :verifica_se_sessao_eh_de_licitacao!, only: [:cotar, :enviar_cotacao, :show_cotacao], raise: false
	before_action :authenticate_usuario!, except: [:cotar, :enviar_cotacao, :show_cotacao]
	before_action :autoriza_usuario!, except: [:cotar, :enviar_cotacao, :show_cotacao]
	before_action :set_pessoa_do_pedido, only: [:show, :edit, :update,:enviar_email_cotacao_externa]
	before_action :disponibiliza_dependencias, only: [:show, :edit]

	# GET /licitacao/pessoas_do_pedido/1
	def show
	end

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

	def cotar
		@configuracao = Configuracao.last
		@codigo_de_acesso = params[:codigo_de_acesso]
		@pessoa_do_pedido = Licitacao::PessoaDoPedido.find_by_codigo_de_acesso(@codigo_de_acesso)
		@tipos_de_responsaveis = Licitacao::PessoaDoPedido.tipos_de_responsaveis

		if @pessoa_do_pedido.present?
			@pessoa_do_pedido.inicia_cotacao
			if @pessoa_do_pedido.validade_codigo_de_acesso < Date.today || !@pessoa_do_pedido.pedido.coleta_de_preco?
				@mensagem = "O prazo para enviar essa cotação expirou, entre em contato com o setor responsável."
				render 'licitacao/pessoas_do_pedido/cotar_mensagem', layout: 'layouts/login'
			elsif @pessoa_do_pedido.cotado? && @codigo_de_acesso.present?
				@mensagem = "Cotação já preenchia, caso deseje alterar entre em contato com o setor responsável."
				render 'licitacao/pessoas_do_pedido/cotar_mensagem', layout: 'layouts/login'
			else
				render :edit, layout: 'layouts/login'
			end
		else
			@mensagem = "Solicitação não encontrada, verifique se o código de acesso informado é válido."
			render 'licitacao/pessoas_do_pedido/cotar_mensagem', layout: 'layouts/login'
		end
	end

	# PATCH/PUT /licitacao/pessoas_do_pedido/1
	def update
		if @pessoa_do_pedido.update(pessoa_do_pedido_params)
			redirect_to @pessoa_do_pedido, success: "Cotação cadastrada com sucesso."
		else
			disponibiliza_dependencias
			render :edit
		end
	end

	def show_cotacao
		@codigo_de_acesso = params[:codigo_de_acesso]
		@pessoa_do_pedido = Licitacao::PessoaDoPedido.find_by_codigo_de_acesso(@codigo_de_acesso)
		redirect_to acesso_negado_path and return unless @pessoa_do_pedido
		render :show_cotacao, layout: 'layouts/login'
	end

	# PATCH/PUT /licitacao/pessoas_do_pedido/1
	def enviar_cotacao
		@configuracao = Configuracao.last
		@codigo_de_acesso = params[:licitacao_pessoa_do_pedido][:codigo_de_acesso]
		@pessoa_do_pedido = Licitacao::PessoaDoPedido.find_by_codigo_de_acesso(@codigo_de_acesso)
		@pessoa_do_pedido.data_de_cadastro_da_cotacao = Date.today

		if @pessoa_do_pedido.nil? || (@pessoa_do_pedido.validade_codigo_de_acesso < Date.today || !@pessoa_do_pedido.pedido.coleta_de_preco?)
			@mensagem = "O prazo para enviar essa cotação expirou ou você não possui permissão para enviar cotação, entre em contato com o setor responsável."
			render 'licitacao/pessoas_do_pedido/cotar_mensagem', layout: 'layouts/login'
		else
			if @pessoa_do_pedido.update( pessoa_do_pedido_params )
				redirect_to  show_cotacao_licitacao_pessoas_do_pedido_path(codigo_de_acesso: @pessoa_do_pedido.codigo_de_acesso), notice: 'Cotação atualizada com sucesso e comprovante enviado por e-mail'
				enviar_email_cotacao_externa(@pessoa_do_pedido.id, params[:codigo_de_acesso] )
				@pessoa_do_pedido.atualiza_solicitacao_de_email
			else
				disponibiliza_dependencias
				render :edit, layout: 'layouts/login'
			end
		end
	end

	private
	def set_pessoa_do_pedido
		@pessoa_do_pedido = PessoaDoPedido.find( params[:id] )
	end

	def disponibiliza_dependencias
		@tipos_de_responsaveis = Licitacao::PessoaDoPedido.tipos_de_responsaveis
		@pessoa_do_pedido.inicia_cotacao
	end

	# Permite apenas os parâmetros específicos
	def pessoa_do_pedido_params
		begin
			params.require(:licitacao_pessoa_do_pedido).permit(:prazo_da_proposta, :observacoes, :interno,
				:id, :anexo_cotacao, :anexo_cotacao_file_name, :anexo_cotacao_content_type,
				:anexo_cotacao_file_size, :anexo_cotacao_updated_at, :nome_do_responsavel,
				:cpf_do_responsavel, :tipo_de_responsavel, :data_da_cotacao, :data_de_cadastro_da_cotacao,
				itens_do_pedido_por_pessoa_attributes: [:id, :preco_de_cotacao, :marca, :item_do_pedido_id])
		rescue ActionController::ParameterMissing
			nil
		end
	end

end
end
