class Loa::Relatorios::DemonstrativoDoOrcamentoTematico

	def self.dados orcamento_id, orcamento_tematico_id,unidade_orcamentaria_id = ""
		total = 0

		if unidade_orcamentaria_id.to_i > 0
			dados_filtrados = Loa::TemaDaSubacao.joins(subacao:[acao: :programa_de_governo]).where(loa_programas_de_governo: {orcamento_id: orcamento_id}, orcamento_tematico_id: orcamento_tematico_id, loa_subacoes:{unidade_orcamentaria_id: unidade_orcamentaria_id})
		else
			dados_filtrados = Loa::TemaDaSubacao.joins(subacao:[acao: :programa_de_governo]).where(loa_programas_de_governo: {orcamento_id: orcamento_id}, orcamento_tematico_id: orcamento_tematico_id)
		end

		dados_relatorio = dados_filtrados.joins(subacao: [unidade_orcamentaria: :orgao]).order('loa_orgaos.codigo, loa_unidades_orcamentarias.codigo').map do |tema_da_subacao|
			total += tema_da_subacao.valor_total
			if tema_da_subacao.valor_total.to_f > 0
				{
					unidade_orcamentaria: tema_da_subacao.try(:subacao).try(:unidade_orcamentaria).try(:codigo_completo),
					funcao: tema_da_subacao.try(:subacao).try(:funcao).try(:codigo_e_nome),
					subfuncao: tema_da_subacao.try(:subacao).try(:subfuncao).try(:codigo_e_nome),
					programa: tema_da_subacao.try(:subacao).try(:acao).try(:programa_de_governo).try(:codigo_e_nome),
					acao: tema_da_subacao.try(:subacao).try(:acao).try(:codigo_e_nome),
					subacao: tema_da_subacao.try(:subacao).try(:codigo),
					tipo: tema_da_subacao.tipo,
					indice_proporcional: "#{tema_da_subacao.percentual.to_f} %",
					valor: tema_da_subacao.valor_total.to_f,
					estilo: nil
				}
			end
		end

		dados_relatorio << {
			unidade_orcamentaria: 'Total',
			funcao: nil,
			subfuncao: nil,
			programa: nil,
			acao: nil,
			subacao: nil,
			tipo: nil,
			indice_proporcional: nil,
			valor: total.to_f,
			estilo: {negrito: true}
		}

		dados_relatorio.compact
	end

	def self.dados_geral orcamento_atual
		total = 0
		Loa::TemaDoOrcamento.where(orcamento: orcamento_atual).map do |tema_do_orcamento|
			dados_relatorio = Loa::TemaDaSubacao.joins(subacao:[acao: :programa_de_governo]).where(loa_programas_de_governo: {orcamento_id:  orcamento_atual.id}, orcamento_tematico_id: tema_do_orcamento.orcamento_tematico.id).map do |tema_da_subacao|
				total += tema_da_subacao.valor_total
				unless tema_da_subacao.valor_total.to_f == 0.0
					{
						tema: tema_do_orcamento.descricao,
						unidade_orcamentaria: 'tema_da_subacao.try(:subacao).try(:unidade_orcamentaria).try(:codigo_completo)',
						funcao: tema_da_subacao.try(:subacao).try(:funcao).try(:codigo_e_nome),
						subfuncao: tema_da_subacao.try(:subacao).try(:subfuncao).try(:codigo_e_nome),
						programa: tema_da_subacao.try(:subacao).try(:acao).try(:programa_de_governo).try(:codigo_e_nome),
						acao: tema_da_subacao.try(:subacao).try(:acao).try(:codigo_e_nome),
						subacao: tema_da_subacao.try(:subacao).try(:codigo),
						tipo: tema_da_subacao.tipo,
						indice_proporcional: "#{tema_da_subacao.percentual.to_f} %",
						valor: tema_da_subacao.valor_total.to_f,
						estilo: nil
					}
				end
			end

			dados_relatorio << {
				unidade_orcamentaria: 'Total',
				funcao: nil,
				subfuncao: nil,
				programa: nil,
				acao: nil,
				subacao: nil,
				tipo: nil,
				indice_proporcional: nil,
				valor: total.to_f,
				estilo: {negrito: true}
			}

			dados_relatorio.compact
		end
	end


end
