module Licitacao::DocumentosDoEtpHelper
	def substitui_variaveis_do_etp(conteudo)

		data_previsao = @etp.try(:data_previsao_contratacao)
		mes = data_previsao.strftime('%B') # Obtém o mês em inglês
    mes_pt = mes_por_extenso(mes)

		conteudo = conteudo.gsub("{{PREVISAO_CONTRATACAO_DO_ETP_NUMERICA}}",("#{@etp.try(:data_previsao_contratacao)}")) if conteudo.include?("{{PREVISAO_CONTRATACAO_DO_ETP_NUMERICA}}")
    conteudo = conteudo.gsub("{{PREVISAO_CONTRATACAO_DO_ETP}}", "#{data_previsao.strftime('%d de').upcase} #{mes_pt.upcase} #{data_previsao.strftime('%Y').upcase}") if conteudo.include?("{{PREVISAO_CONTRATACAO_DO_ETP}}")
		conteudo = conteudo.gsub("{{UNIDADE_ORCAMENTARIA_PRINCIPAL_DO_ETP}}",("#{@etp.try(:unidade_orcamentaria).try(:codigo_e_nome)}")) if conteudo.include?("{{UNIDADE_ORCAMENTARIA_PRINCIPAL_DO_ETP}}")
		conteudo = conteudo.gsub("{{UNIDADES_CONVIDADAS_DO_ETP}}",("#{listar_unidades_convidadas_do_etp}")) if conteudo.include?("{{UNIDADES_CONVIDADAS_DO_ETP}}")
		conteudo = conteudo.gsub("{{RELACAO_DE_UNIDADES_PARTICIPANTES_DO_ETP}}",("#{relacao_unidades_participantes}")) if conteudo.include?("{{RELACAO_DE_UNIDADES_PARTICIPANTES_DO_ETP}}")
		conteudo = conteudo.gsub("{{ACOES_DO_ETP}}",("#{listar_acoes_do_etp}")) if conteudo.include?("{{ACOES_DO_ETP}}")
		conteudo = conteudo.gsub("{{INFORMACOES_DAS_ACOES_DO_ETP}}",("#{table_informacoes_acoes_do_etp}")) if conteudo.include?("{{INFORMACOES_DAS_ACOES_DO_ETP}}")
		conteudo = conteudo.gsub("{{RESPONSAVEL_PELA_ELABORACAO_DO_ETP}}",("#{@etp.try(:responsavel).try(:nome)}")) if conteudo.include?("{{RESPONSAVEL_PELA_ELABORACAO_DO_ETP}}")
		conteudo = conteudo.gsub("{{OBJETO_DO_ETP}}",("#{@etp.try(:objeto)}")) if conteudo.include?("{{OBJETO_DO_ETP}}")
		conteudo = conteudo.gsub("{{NECESSIDADE_DA_CONTRATACAO_DO_ETP}}",("#{@etp.try(:necessidade_da_contratacao)}")) if conteudo.include?("{{NECESSIDADE_DA_CONTRATACAO_DO_ETP}}")
		conteudo = conteudo.gsub("{{NUMERO_DO_ETP}}",("#{@etp.try(:numero_estudo)}")) if conteudo.include?("{{NUMERO_DO_ETP}}")
		conteudo = conteudo.gsub("{{DESCRICAO_DAS_SOLUCOES_DO_ETP}}", "#{@etp.try(:descricao_solucoes_do_etp)}") if conteudo.include?("{{DESCRICAO_DAS_SOLUCOES_DO_ETP}}")
		conteudo = conteudo.gsub("{{PROVIDENCIAS_PREVIAS_DO_ETP}}",("#{@etp.try(:providencia_previa_solucoes_do_etp)}")) if conteudo.include?("{{PROVIDENCIAS_PREVIAS_DO_ETP}}")
		conteudo = conteudo.gsub("{{JUSTIFICATIVA_PARA_O_PARCELAMENTO_DA_CONTRATACAO}}",("#{@etp.try(:justificativa_parcelamento_solucoes_do_etp)}")) if conteudo.include?("{{JUSTIFICATIVA_PARA_O_PARCELAMENTO_DA_CONTRATACAO}}")
		conteudo = conteudo.gsub("{{RELACAO_DE_ITENS_DO_ETP_COMPLETO}}",("#{relacao_de_itens_etp_completo}")) if conteudo.include?("{{RELACAO_DE_ITENS_DO_ETP_COMPLETO}}")
		conteudo = conteudo.gsub("{{RELACAO_DE_ITENS_DO_ETP}}",("#{relacao_de_itens_etp}")) if conteudo.include?("{{RELACAO_DE_ITENS_DO_ETP}}")
		conteudo = conteudo.gsub("{{RESUMO_DAS_SOLUCOES}}",("#{resumo_das_solucoes_etp}")) if conteudo.include?("{{RESUMO_DAS_SOLUCOES}}")
		conteudo = conteudo.gsub("{{IMPACTOS_AMBIENTAIS_DO_ETP}}",("#{(impactos_ambientais)}")) if conteudo.include?("{{IMPACTOS_AMBIENTAIS_DO_ETP}}")

		conteudo
	end
	
	def mes_por_extenso(mes)
		meses = {
			"January" => "janeiro",
			"February" => "fevereiro",
			"March" => "março",
			"April" => "abril",
			"May" => "maio",
			"June" => "junho",
			"July" => "julho",
			"August" => "agosto",
			"September" => "setembro",
			"October" => "outubro",
			"November" => "novembro",
			"December" => "dezembro"
		}
		
		meses[mes] || mes # Retorna o mês em português ou o próprio mês se não encontrado
	end
	
	def informacoes_acoes_etp
		@etp.acoes_do_etp.map do |acao|
			"#{acao.numero} - #{acao.unidade_orcamentaria} - #{'teste'} - #{acao.prazo_estimado}"
		end.join("\n")
	end

	def relacao_unidades_participantes

		unidades = @etp.unidades_orcamentarias_por_etp.map do |unidade|
			"• #{unidade.unidade_orcamentaria.nome.upcase}<br>"
		end.join('; ') 
	
		unidades.presence || "Nenhuma unidade participante encontrada."
	end
	

	def listar_unidades_convidadas_do_etp
		unidade_id = @etp.unidade_orcamentaria_id
		
		unidades = @etp.unidades_orcamentarias_por_etp.select do |unidade|
			unidade.unidade_orcamentaria_id != unidade_id
		end
	
		nomes_unidades = unidades.map { |unidade| unidade.unidade_orcamentaria.try(:nome) }.uniq
	
		nomes_unidades.compact.join(', ').upcase
	end
	

	def listar_acoes_do_etp
		acoes = @etp.acoes_do_etp
		
		acoes_numeros = acoes.map { |acao_do_etp| acao_do_etp.acao.try(:numero) }
		
		acoes_numeros.compact.join(', ').upcase
	end

	def table_informacoes_acoes_do_etp
		table = '<table style=\"font-family: arial; font-size: 8pt; margin: auto; margin-bottom: 5px; width: 100%;border: 1px solid black;\">
			<tbody>
			<tr>
				<th style=\"border: 1px solid black;width: 10%;\">Nº DA AÇÃO</th>
				<th style=\"border: 1px solid black;width: 10%;\">UNIDADE ORCAMENTÁRIA</th>
				<th style=\"border: 1px solid black;width: 10%; \">VALOR ESTIMADO NO ETP</th>
				<th style=\"border: 1px solid black;width: 10%;\">PRAZO ESTIMADO NO ETP</th>
	
			</tr>'

		@etp.acoes_do_etp.each_with_index do |acao_do_etp, index|
			table <<
				"<tr>
					<td style=\"border: 1px solid black;text-align: center;\">#{acao_do_etp.acao.numero}</td>
					<td style=\"border: 1px solid black;text-align: justify;\"><div>#{acao_do_etp.acao.unidade_orcamentaria.nome}</div></td>
					<td style=\"border: 1px solid black;text-align: center;\">#{acao_do_etp.acao.valor_da_acao.valor_contabil}</td>	
					<td style=\"border: 1px solid black;\"></td>				
				</tr>"
		end

		table << '</tbody> </table>'
	end
	
	
	def relacao_de_itens_etp
		solucao_final = @etp.solucoes_do_etp.find_by(solucao_final: true)
		
		# Unidades orçamentárias para exibição
		unidades_orcamentarias = @etp.unidades_orcamentarias_por_etp
		
		if solucao_final.present?
			table = '<table style="font-family: arial; font-size: 8pt; margin: auto; margin-bottom: 5px; width: 100%; border: 1px solid black;">
				<tbody>
				<tr>
					<th style="border: 1px solid black; width: 20%;">DESCRIÇÃO DO ITEM</th>'
			
			unidades_orcamentarias.each do |unidade|
				table << "<th style=\"border: 1px solid black; width: 10%;\">#{unidade.unidade_orcamentaria.sigla}</th>"
			end
	
			table << '<th style="border: 1px solid black; width: 10%;">Total</th></tr>'
			
			# Itera sobre os itens da solução
			solucao_final.itens_da_solucao.each do |item_da_solucao|
				table << "<tr>
										<td style=\"border: 1px solid black; text-align: center;\">#{item_da_solucao.item.descricao}</td>"
				
				total_quantidade = 0
				
				unidades_orcamentarias.each do |unidade|
					# Encontra a quantidade correspondente à unidade orçamentária
					item_da_solucao_por_unidade = item_da_solucao.itens_da_solucao_do_etp_por_unidade_orcamentaria.find do |item|
						item.unidade_orcamentaria_por_solucao_do_etp.unidade_orcamentaria_id == unidade.unidade_orcamentaria_id
					end
					
					quantidade = item_da_solucao_por_unidade&.quantidade || 0
					total_quantidade += quantidade
					
					table << "<td style=\"border: 1px solid black; text-align: center;\">#{quantidade}</td>"
				end
				
				table << "<td style=\"border: 1px solid black; text-align: center;\">#{total_quantidade}</td></tr>"
			end
	
			table << '</tbody></table>'
		else
			'<p style="font-family: arial; font-size: 8pt; text-align: center;">Nenhuma solução final encontrada.</p>'.html_safe
		end
	end
	


	def descricao_solucoes_do_etp
		@etp.solucoes_do_etp.pluck(:descricao).join("\n")
	end

	def providencia_previa_solucoes_do_etp
		@etp.solucoes_do_etp.pluck(:providencia_previa).join("\n")
	end

	def justificativa_parcelamento_solucoes_do_etp
		@etp.solucoes_do_etp.pluck(:justificativa_parcelamento_contratacao).join("\n")
	end

	def impactos_ambientais
		@etp.impactos_ambientais_do_etp.pluck(:impacto).join("\n")
	end

	def relacao_de_itens_etp_completo
		solucao_final = @etp.solucoes_do_etp.find_by(solucao_final: true)
		total = 0
		table = '<table style=\"font-family: arial; font-size: 8pt; margin: auto; margin-bottom: 5px; width: 100%;border: 1px solid black;\">
			<tbody>
			<tr>
				<th style=\"border: 1px solid black;width: 10%;text-align: center\">DESCRIÇÃO DO ITEM</th>
				<th style=\"border: 1px solid black;width: 10%;text-align: center\">UNIDADE DE MEDIDA</th>
				<th style=\"border: 1px solid black;width: 10%;text-align: center \">QUANTIDADE TOTAL</th>
				<th style=\"border: 1px solid black;width: 10%;text-align: center\"> VALOR UNITARIO ESTIMADO</th>
				<th style=\"border: 1px solid black;width: 10%;text-align: center\"> VALOR TOTAL DO ITEM</th>
			</tr>'

			if solucao_final.present?
				solucao_final.itens_da_solucao.map do |item_da_solucao|
					quantidade = item_da_solucao.itens_da_solucao_do_etp_por_unidade_orcamentaria.sum(:quantidade)
					valor_unitario = item_da_solucao.valor_unitario
					valor_total = valor_unitario * quantidade
					total += valor_total
				table <<
					"<tr>
						<td style=\"border: 1px solid black;text-align: center;\">#{item_da_solucao.item.descricao}</td>
						<td style=\"border: 1px solid black;text-align: justify;\"><div>#{item_da_solucao.item.unidade_de_medida.descricao}</div></td>
						<td style=\"border: 1px solid black;text-align: center\">#{quantidade}</td>	
						<td style=\"border: 1px solid black;text-align: center\">#{valor_unitario.contabil}</td>
						<td style=\"border: 1px solid black;text-align: center\">#{valor_total.contabil}</td>				
					</tr>"
						
			end

			table <<
				"<tr>
					<th colspan='7' align=\"right\"style=\"border: 1px solid black;\">TOTAL: #{total.contabil}</th>
				</tr> </tbody> </table>"
		end	
	end
	
	def resumo_das_solucoes_etp
		solucoes = @etp.solucoes_do_etp.where(solucao_final: false)
		
		if solucoes.present?
			table = '<table style="font-family: arial; font-size: 8pt; margin: auto; margin-bottom: 5px; width: 100%; border: 1px solid black;">
				<tbody>
				<tr>
					<th style="border: 1px solid black;width: 10%;">Nº DA SOLUÇÃO</th>
					<th style="border: 1px solid black;width: 10%;">DESCRIÇÃO DA SOLUÇÃO</th>
					<th style="border: 1px solid black;width: 10%;">MOTIVO DA NÃO ESCOLHA</th>
					<th style="border: 1px solid black;width: 10%;">VIÁVEL</th>
				</tr>'
			
			solucoes.each do |solucao|
				table << "<tr>
					<td style=\"border: 1px solid black;text-align: center;\">#{solucao.numero}</td>
					<td style=\"border: 1px solid black;text-align: justify;\"><div>#{solucao.descricao_da_solucao}</div></td>
					<td style=\"border: 1px solid black;text-align: justify;\"></td>
					<td style=\"border: 1px solid black;text-align: center;\"></td>
				</tr>"
			end
	
			table << '</tbody></table>'
		else
			'<p style="font-family: arial; font-size: 15px; text-align: left;">Nenhuma solução encontrada.</p>'
		end
	end
	
	

end