class Licitacao::ModeloDeDocumento < ApplicationRecord
	has_paper_trail
	include TradutorConcern

	validates_presence_of :tipo, :titulo, :conteudo, :lei

	enum modalidade: {
		# O campo modalidade atualmente só aparece no módulo de Licitação
		# para cadastrar modelos de Projeto/Processo/Contrato
		convite: 0,
		tomada_de_precos: 1,
		concorrencia_publica: 2,
		concurso: 3,
		pregao_presencial: 5,
		pregao_eletronico: 6,
		rdc: 7,
		dispensa_de_licitacao: 8,
		inexigibilidade: 9,
		chamamento_publico: 10,
		dispensa_de_chamamento: 11,
		inexigibilidade_de_chamamento: 12,
		carona: 13,
		chamada_publica: 14
	}

	enum tipo: {
		# Módulo de Licitação
		edital: 0,
		ata_de_registro_de_preco: 1,
		declaracao: 3,
		termo: 4,
		solicitacao: 5,
		autorizacao: 6,
		despacho: 7,
		parecer: 8,
		minuta_de_contrato: 9,
		minuta_de_ata_de_registro_de_preco: 10,
		termo_de_referencia: 11,
		minuta_do_edital: 12,
		contrato: 2,
		aditivo: 16,
		cotacao_por_email: 19,
		anexos_do_edital: 20,
		apostilamento: 21,
		# Módulo de Obras
		termo_de_paralisacao: 13,
		termo_de_conclusao: 14,
		termo_de_reinicio: 15,
		# Módulo Administrativo
		diaria: 17,
		liquidacao: 22,
		#Módulo Contabilidade
		decreto_de_contigenciamento: 18,
		# Geral
		capa: 23,
		aditivo_da_ata: 24,
		outros_documentos: 99
	}

	enum lei: {
		lei_8666_93: 1, #8.666/93
		lei_14133_21: 2  #14.133/21

	}

	def self.tipos_da_licitacao
		tipos.reject do |tipo|
			(tipos_de_obra.include?(tipo) || tipos_do_administrativo.include?(tipo) || tipos_da_contabilidade.include?(tipo)) if tipo != "outros_documentos"
		end
	end

	def self.tipos_de_obra
		{
			"termo_de_paralisacao" => 13,
			"termo_de_conclusao" => 14,
			"termo_de_reinicio" => 15,
			"outros_documentos" => 99
		}
	end

	def self.tipos_do_administrativo
		{
			"diaria" => 17,
			"liquidacao" => 22,
			"outros_documentos" => 99
		}
	end

	def self.tipos_da_contabilidade
		{ "decreto_de_contigenciamento" => 18,
			"liquidacao" => 22,
			"outros_documentos" => 99
		}
	end

	def self.tipos_do_administrativo_com_obras
		{
			"termo_de_paralisacao" => 13,
			"termo_de_conclusao" => 14,
			"termo_de_reinicio" => 15,
			"diaria" => 17,
			"liquidacao" => 22,
			"outros_documentos" => 99
		}
	end

	def self.modalidade_parse modalidade_do_processo, modalidade_de_licitacao
		if modalidade_do_processo.eql?("processo_licitatorio")
			codigo = case modalidade_de_licitacao
				when "convite" then 0
				when "tomada_de_precos" then 1
				when "concorrencia_publica" then 2
				when "concurso" then 3
				when "pregao_presencial" then 5
				when "pregao_eletronico" then 6
				when "rdc" then 7
				when "carona" then 13
			end
		elsif modalidade_do_processo.eql?("dispensa_de_licitacao")
			codigo = case modalidade_de_licitacao
				when "dispensa_ou_inexigibilidade" then 8
			end
		elsif modalidade_do_processo.eql?("inexigibilidade_de_licitacao")
			codigo = case modalidade_de_licitacao
				when "dispensa_ou_inexigibilidade" then 9
			end
		elsif modalidade_do_processo.eql?("parceria_osc")
			codigo = case modalidade_de_licitacao
				when "chamamento_publico" then 10
				when "dispensa_de_chamamento" then 11
				when "inexigibilidade_de_chamamento" then 12
				when "chamada_publica" then 14
			end
		end
	end
end
