class Tableless::RelatorioDaLicitacao
	include ActiveModel::Model

	attr_accessor :relatorio
	attr_accessor :button

	attr_accessor :data_inicial
	attr_accessor :data_final
	attr_accessor :numero_do_processo
	attr_accessor :unidade_gestora
	attr_accessor :fornecedor
	attr_accessor :numero_do_contrato
	attr_accessor :tipo_de_contrato
	attr_accessor :elemento_de_despesa
	attr_accessor :data_da_busca
	attr_accessor :unidade_orcamentaria
	attr_accessor :categoria_da_despesa
	attr_accessor :tipo_de_contratacao
	attr_accessor :prioridade
	attr_accessor :status
	attr_accessor :modalidade_do_processo
	attr_accessor :acoes_fechadas
	attr_accessor :numero_de_dias
	attr_accessor :sub_elemento_de_despesa
	attr_accessor :elemento_de_despesa_codigo
	attr_accessor :sub_elemento_de_despesa_codigo
	attr_accessor :informacoes_aditivo
	attr_accessor :ata_inicio_de_vigencia


	validates_presence_of :data_inicial, :data_final

	def nome_do_relatorio
		case relatorio
		when "relacao_atas_e_contratos"
			"Relação de Atas e Contratos"
		when "resumo_dos_contratos"
			"Resumo dos Contratos"
		when "relacao_contratos_por_vigencia"
			"Relação de Contratos por Vigência"
		when "auxiliar_prorrogacao_contratual"
			"Auxiliar na Prorrogação Contratual"
		when "saldo_da_ata_por_unidade"
			"Saldo da Ata por Unidade"
		when "fracionamento_dispensa_i"
			"Controle de Fracionamento Dispensa de Licitações - Art. 24 INC I"
		when "fracionamento_dispensa_ii"
			"Controle de Fracionamento Dispensa de Licitações - Art. 24 INC II"
		when "relacao_atas_por_vigencia"
			"Relação de Atas por Vigência"
		when "relacao_agentes_de_participacao_dos_contratos"
			"Relação Agentes de Participacao dos contratos"
		when "relacao_de_fornecedores_vigentes"
			"Relação de Fornecedores em Contratos Vigentes"
		else
			"Relatório"
		end
	end

	def retorna_contratos_filtrados
		contratos = Licitacao::Contrato.left_joins(:aditivos)
			.includes(itens_do_contrato: [item_do_lote: [item_do_pedido: :item, lote: [processo: :pedido]]])
			.includes(contratado: [pessoa_do_projeto: :pessoa], aditivos: :itens_do_aditivo)
			.includes(unidade_orcamentaria_do_exercicio: :unidade_gestora)
			.includes(orcamentos_da_despesa_do_contrato: [orcamento_da_despesa: [elemento_de_despesa_por_subacao: :subacao, fonte_de_recursos: :modulo], sub_elemento_de_despesa: :elemento_de_despesa])
			.includes(:ata_de_registro_de_precos, :empenhos).distinct

		if data_inicial.present? && data_final.present?
			contratos = contratos.select('licitacao_contratos.*, MAX(licitacao_aditivos.fim_da_vigencia)')
				.group('licitacao_contratos.id')
				.having('(MAX(licitacao_aditivos.fim_da_vigencia) IS NOT NULL AND MAX(licitacao_aditivos.fim_da_vigencia) >= ? AND MAX(licitacao_aditivos.fim_da_vigencia) <= ?) OR (licitacao_contratos.fim_da_vigencia IS NOT NULL AND licitacao_contratos.fim_da_vigencia >= ? AND licitacao_contratos.fim_da_vigencia <= ?)', data_inicial.to_date, data_final.to_date, data_inicial.to_date, data_final.to_date)
		end

		contratos = contratos.joins(:projeto).where(licitacao_projetos: { numero_do_processo: numero_do_processo }) if numero_do_processo.present?
		contratos = contratos.where(numero: numero_do_contrato) if numero_do_contrato.present?
		contratos = contratos.joins(contratado: [pessoa_do_projeto: :pessoa]).where(base_pessoas: { id: fornecedor }) if fornecedor.present?
		if unidade_gestora.present?
			unidades_orcamentarias = Loa::UnidadeGestora.find(unidade_gestora).unidades_orcamentarias

			cod_orgaos = unidades_orcamentarias.joins(:orgao).pluck('loa_orgaos.codigo')
			cod_unidades = unidades_orcamentarias.pluck(:codigo)
			unidades_gestoras_ids =  unidades_orcamentarias.pluck(:unidade_gestora_id)
			contratos = contratos.joins(:unidade_orcamentaria_do_exercicio).where(loa_unidades_orcamentarias: { unidade_gestora_id: unidades_gestoras_ids })
		end

		contratos_filtrados = contratos
	end
end
