class Loa::RelatoriosDoPlanejamentoController < ApplicationController
	include ControllerConcern

	before_action :disponibiliza_dependencias
	before_action :set_contexto

	def new
		@relatorio_do_planejamento = Tableless::RelatorioDoPlanajemento.new(relatorio: params[:relatorio])
	end

	# seleciona um relatório para imprimir
	def selecionar_relatorio
		@relatorio_do_planejamento = Tableless::RelatorioDoPlanejamento.new()
	end

	def imprimir
		@relatorio_do_planejamento = Tableless::RelatorioDoPlanejamento.new(tableless_relatorio_do_planejamento_params)

		if(tableless_relatorio_do_planejamento_params[:button].eql?("pdf"))
			imprimir_em_pdf( @relatorio_do_planejamento )
		end
	end

	def imprimir_em_pdf(relatorio_do_planejamento)
		relatorio = relatorio_do_planejamento.relatorio
		if respond_to? relatorio.to_s, :private

			if relatorio.to_s.eql?("folha_de_pagamento")
				@folha_de_pagamento = pesquisa_folha_de_pagamento()
			end

			arquivo = CombinePDF.new
			arquivo << CombinePDF.parse(send(relatorio))
			arquivo.number_pages(location: :bottom_right, margin_from_height: 0, number_format: '%s', font_size: 8)
			send_data arquivo.to_pdf, filename: "#{relatorio.to_s}.pdf", type: "application/pdf", disposition: 'inline'
		else
			redirect_to new_loa_relatorios_do_planejamento_path, alert: 'Relatório selecionado não existe'
		end
	end

	def pesquisa_folha_de_pagamento
		@mes = @relatorio_do_planejamento.mes.blank? ? Date.today.month : @relatorio_do_planejamento.mes.to_i
		@tipo = @relatorio_do_planejamento.tipo_da_folha.present? ? Contabilidade::Liquidacao::TIPO_DA_FOLHA.select{|n| n["title"] == @relatorio_do_planejamento.tipo_da_folha}.first['id'] : nil
		@unidade_orcamentaria = @relatorio_do_planejamento.unidade_orcamentaria.blank? ? 'CONSOLIDADO' : Loa::UnidadeOrcamentaria.find_by(id: @relatorio_do_planejamento.unidade_orcamentaria)

		@liquidacoes = contexto_atual.liquidacoes.joins(empenho: [orcamento_da_despesa: [elemento_de_despesa_por_subacao: :elemento_de_despesa]])
			.where("base_elementos_de_despesa.codigo like any (array['319011%', '319004%', '319016%', '319003%', '319001%'])")
			.joins(empenho: [pessoa: :tipo_de_pessoa]).where("base_tipo_de_pessoas.codigo = '6'")
			.where('contabilidade_empenhos.unidade_orcamentaria_id is not null and contabilidade_liquidacoes.tipo_da_folha is not null
				and contabilidade_liquidacoes.data_de_emissao_da_folha is not null and contabilidade_liquidacoes.mes_de_competencia is not null and contabilidade_liquidacoes.restos_a_pagar <> true')
		
		if @relatorio_do_planejamento.unidade_orcamentaria.present? && @relatorio_do_planejamento.unidade_orcamentaria != 'CONSOLIDADO'
			@liquidacoes = @liquidacoes.joins(empenho: :unidade_orcamentaria).where('loa_unidades_orcamentarias.id = ?', @unidade_orcamentaria.id)
		end
		
		if @tipo.present?
			@liquidacoes = @liquidacoes.where('tipo_da_folha = ?', @tipo)
		end

		unless @relatorio_do_planejamento.mes.blank?
			@liquidacoes = @liquidacoes.select{ |liquid| liquid.data_da_liquidacao.month == @mes rescue nil }
		end

		return @liquidacoes.sort_by(&:data_da_liquidacao)
	end

	def folha_de_pagamento
		titulo3 = @relatorio_do_planejamento.unidade_orcamentaria.blank? ? 'CONSOLIDADO' : Loa::UnidadeOrcamentaria.find_by(id: @relatorio_do_planejamento.unidade_orcamentaria).try(:nome)

		render_to_string pdf: "pagamento",
			template: "loa/relatorios_do_planejamento/folha_de_pagamento.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_da_contabilidade.html.slim',
					locals: {
						titulo1: "Relatório de Detalhamento da Folha",
						titulo2: "#{Date::MONTHNAMES[@mes]}/#{contexto_atual.exercicio}",
						titulo3: titulo3
					}
				},
				spacing: 5
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas(top: 5)
	end

	private

	def disponibiliza_dependencias
		@configuracoes = Configuracao.last

		if current_usuario.desenvolvedor?
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias
		else
			@unidades_orcamentarias = current_usuario.unidades_orcamentarias.joins(:orgao).where('loa_orgaos.orcamento_id = ?', contexto_atual.id)
		end

		@meses = [
			["Janeiro", 1], ["Fevereiro", 2], ["Março", 3], ["Abril", 4], ["Maio", 5], ["Junho", 6], 
			["Julho", 7], ["Agosto", 8], ["Setembro", 9], ["Outubro", 10], ["Novembro", 11], ["Dezembro", 12]
		]

		@tipos = Contabilidade::Liquidacao::TIPO_DA_FOLHA.map{|tipo| tipo.values[0]}
	end

	def set_contexto
		@contexto = contexto_atual
	end

	def tableless_relatorio_do_planejamento_params
		begin
			params.require(:tableless_relatorio_do_planejamento).permit(
				:relatorio, :button, :unidade_orcamentaria, :mes, :tipo_da_folha
			)
		rescue ActionController::ParameterMissing
			nil
		end
	end

end
