class RelatoriosGeraisController < ApplicationController
	include ControllerConcern

	skip_before_action :verifica_se_tem_orcamento_na_sessao!, only: [:new, :imprimir], raise: false
	before_action :authenticate_usuario!
	before_action :autoriza_usuario! , except: [:new, :imprimir]

	before_action :disponibiliza_dependencias

	# GET /relatorios_gerais/new
	def new
		@relatorio_geral = Tableless::RelatorioGeral.new
	end

	def imprimir
		set_relatorio_geral
		relatorio = "atividades"
		if respond_to? relatorio.to_s, :private
			loa = CombinePDF.new
			loa << CombinePDF.parse(send(relatorio))
			send_data loa.to_pdf, filename: "#{params[:tableless_relatorio_geral][:tipo_de_relatorio]}.pdf", type: "application/pdf", disposition: 'inline'
		else
			redirect_to :back, alert: 'Relatório selecionado não existe'
		end
	end

	def atividades
		disponibiliza_dependencias_relatorio

		unidade_orcamentaria = @unidade_orcamentaria.blank? ? "" : Loa::UnidadeOrcamentaria.find(@unidade_orcamentaria)

		if @tipo_de_relatorio == "atividades_da_licitacao"
			titulo1 = "RELATÓRIO DE ATIVIDADES DA LICITAÇÃO"
		else
			titulo1 = "RELATÓRIO DE ATIVIDADES DO ADMINISTRATIVO"
		end

		if @data_inicial.present? && @data_final.present?
			titulo3 = "MÊS DE REFERÊNCIA: #{Date::MONTHNAMES[@data_de_referencia.month].upcase}/#{@data_de_referencia.year} - Período: #{@data_inicial} à #{@data_final}"
		else
			titulo3 = "MÊS DE REFERÊNCIA: #{Date::MONTHNAMES[@data_de_referencia.month].upcase}/#{@data_de_referencia.year}"
		end

		render_to_string pdf: "atividades",
			template: "relatorios_gerais/atividades.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorio_geral.html.slim',
					locals: {
						titulo1: titulo1,
						titulo2: "REF. CONTRATO: #{@numero_do_contrato}",
						titulo3: titulo3,
						titulo4: "Nº DA NOTA FISCAL: #{@numero_da_nota_fiscal}",
						titulo5: "#{unidade_orcamentaria.try(:codigo_e_nome)}",
						titulo6: "EMPRESA: #{@empresa} CNPJ: #{@cnpj}",
						titulo7: "RAZÃO SOCIAL: #{@razao}",
						titulo8: "ENDEREÇO: #{@endereco}",
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas(top: 20)
	end

	private
	def set_relatorio_geral
		@relatorio_geral = Tableless::RelatorioGeral.new(tableless_relatorio_geral_params)
	end

	def disponibiliza_dependencias
		@tipos = ["Atividades da Licitação", "Atividades do Administrativo"]
		@empresas = [
			"BR Pro Solution", "Intersol Serviços", "Intersol Tecnologia"]
		@logos = [
			"ProSolutions-d2a2991d72cbb3cf535a9ae0b81cea9db3a8222aa413b1901ea8f37aa7831ec0.jpg",
			"Intersol-7d6c23864838ece376071edbff6cfcc5027c5d1517262664dd6619c00e08dd15.jpg",
			"IntersolServicos-407809ed9c7f1c26bb2d39faea3ff6240dd091a1849d7c12d78aef65f44b3c49.jpg"
		]
		@razaoes = [
			"BR Projetos Soluções e Serviços",
			"Intersol Serviços de Informatica Ltda - EPP",
			"Intersol Tecnologia e Serviços de Informatica LTDA"
		]
		@cnpjs = [
			"27.060.226/0001-34", "10.502.804/0001-42", "05.853.828/0001-06"]
		@enderecos = [
			"Rua Leonardo Mota, 2589 - Dionísio Torres; Fortaleza-CE, 60170-041",
			"Avenida I Nº 57 Torre I Sala 313 Bairro Conjunto Jereissati I; Maracanaú-CE",
			"Av. Eusebio de Queiroz, 4808 - Sala 113 - Centro; Eusébio-CE 61.760-051"
		]
		@assinatura_intersol = "AssinaturaIntersol-010e52cd0adeb01529b08777d99cce4fdd7c2feb06f23df9edd0c5d1c6263226.png"
		@assinatura_intersol_servicos = "AssinaturaIntersol_servicos-#{Digest::SHA256.hexdigest(File.read(Rails.root.join('app', 'assets', 'images', 'assinaturas', 'AssinaturaIntersol_servicos.png')))}.png"
		@unidades_orcamentatias = Loa::UnidadeOrcamentaria.joins(orgao: :orcamento).order('orcamentos.exercicio desc').all
		@configuracoes = Configuracao.last
	end

	def disponibiliza_dependencias_relatorio
		# Data de referência preenchida na tela
		@data_de_referencia = "01/#{@relatorio_geral.mes_de_referencia.to_i.digitos(2)}/#{@relatorio_geral.ano_de_referencia}".to_date
		# Data Inicial preenchida na tela
		@data_inicial = @relatorio_geral.data_inicial.to_date
		# Data Final Preenchida na tela
		@data_final = @relatorio_geral.data_final.to_date
		# Número da contrato preenchido na tela
		@numero_do_contrato = @relatorio_geral.numero_do_contrato
		# Número da nota fiscal preenchido na tela
		@numero_da_nota_fiscal = @relatorio_geral.numero_da_nota_fiscal
		# Unidade Orçamentária escolhida na tela
		@unidade_orcamentaria = @relatorio_geral.unidade_orcamentaria
		# Define o tipo de relatorio
		@tipo_de_relatorio = @relatorio_geral.tipo_de_relatorio
		# Define a logo com base na empresa escolhida na tela
		@logo = @logos[@empresas.index(@relatorio_geral.empresa_parceira)]
    # Define a empresa com base na empresa escolhida na tela
		@empresa = @empresas[@empresas.index(@relatorio_geral.empresa_parceira)]
		# Define o endreço com base na empresa escolhida na tela
		@endereco = @enderecos[@empresas.index(@relatorio_geral.empresa_parceira)]
		# Define o CNPJ com base na empresa escolhida na tela
		@cnpj = @cnpjs[@empresas.index(@relatorio_geral.empresa_parceira)]
		# Define a razão social com base na empresa escolhida na tela
		@razao = @razaoes[@empresas.index(@relatorio_geral.empresa_parceira)]

		@imprime_assinatura = [1, 2].include?(@empresas.index(@relatorio_geral.empresa_parceira)) ? true : false

		if @tipo_de_relatorio == "atividades_da_licitacao"
			if @unidade_orcamentaria.blank?
				# Dados para preencher as tabelas no relatório
				@qtds_licitacao = @relatorio_geral.retorna_quantidades_licitacao(@data_de_referencia)
				# Arquivos do SIM são gerados no mês X referentes ao mês X - 1
				@qtds_arquivos_tcm_licitacao = @relatorio_geral.retorna_qtds_arquivos_tcm_licitacao(@data_de_referencia - 1.months)
			else
				# Dados para preencher as tabelas no relatório por unidade orcamentária
				@qtds_licitacao = @relatorio_geral.retorna_quantidades_licitacao_por_unidade(@data_de_referencia, @unidade_orcamentaria)
				# Arquivos do SIM são gerados no mês X referentes ao mês X - 1 por unidade orcamentária
				@qtds_arquivos_tcm_licitacao = @relatorio_geral.retorna_qtds_arquivos_tcm_licitacao_por_unidade(@data_de_referencia - 1.months, @unidade_orcamentaria)
			end
		else
			if @data_inicial.present? && @data_final.present?
				if @unidade_orcamentaria.blank?
					# Dados para preencher as tabelas no relatório
					@qtds_administrativo = @relatorio_geral.retorna_quantidades_administrativo_por_periodo(@data_inicial, @data_final)
					# Arquivos do SIM são gerados no mês X referentes ao mês X - 1
					@qtds_arquivos_tcm_administrativo = @relatorio_geral.retorna_qtds_arquivos_tcm_administrativo_por_periodo(@data_inicial - 1.months, @data_final - 1.months)
				else
					# Dados para preencher as tabelas no relatório por unidade orcamentária
					@qtds_administrativo = @relatorio_geral.retorna_quantidades_administrativo_por_unidade_por_periodo(@data_inicial, @data_final, @unidade_orcamentaria)
					# Arquivos do SIM são gerados no mês X referentes ao mês X - 1 por unidade orcamentária
					@qtds_arquivos_tcm_administrativo = @relatorio_geral.retorna_qtds_arquivos_tcm_administrativo_por_unidade_por_periodo(@data_inicial - 1.months, @data_final - 1.months, @unidade_orcamentaria)
				end
			else
				if @unidade_orcamentaria.blank?
					# Dados para preencher as tabelas no relatório
					@qtds_administrativo = @relatorio_geral.retorna_quantidades_administrativo(@data_de_referencia)
					# Arquivos do SIM são gerados no mês X referentes ao mês X - 1
					@qtds_arquivos_tcm_administrativo = @relatorio_geral.retorna_qtds_arquivos_tcm_administrativo(@data_de_referencia - 1.months)
				else
					# Dados para preencher as tabelas no relatório por unidade orcamentária
					@qtds_administrativo = @relatorio_geral.retorna_quantidades_administrativo_por_unidade(@data_de_referencia, @unidade_orcamentaria)
					# Arquivos do SIM são gerados no mês X referentes ao mês X - 1 por unidade orcamentária
					@qtds_arquivos_tcm_administrativo = @relatorio_geral.retorna_qtds_arquivos_tcm_administrativo_por_unidade(@data_de_referencia - 1.months, @unidade_orcamentaria)
				end
			end
		end
	end

	def tableless_relatorio_geral_params
		begin
			params.require(:tableless_relatorio_geral).permit(:tipo_de_relatorio, :empresa_parceira, :mes_de_referencia, :ano_de_referencia, :numero_da_nota_fiscal, :numero_do_contrato, :unidade_orcamentaria, :data_inicial, :data_final)
		rescue ActionController::ParameterMissing
			nil
		end
	end
end
