# frozen_string_literal: true

require "multibases"
require "securerandom"

class ParentCodeRepo
	def initialize(redis=REDIS)
		@redis = redis
	end

	def find(code)
		@redis.hget("jmp_parent_codes", code).then do |parent_id|
			(parent_id ? @redis.get("jmp_customer_trust_level-#{parent_id}") : nil)
				.then do |tl|
					tl == "Tomb" ? nil : parent_id
				end
		end
	end

	def find_or_create(customer_id)
		@redis.get("jmp_customer_parent_code-#{customer_id}").then do |code|
			next code if code

			code = "p#{Multibases.pack('base32upper', SecureRandom.bytes(4))}"
			EMPromise.all([
				@redis.set("jmp_customer_parent_code-#{customer_id}", code),
				@redis.hset("jmp_parent_codes", code, customer_id)
			]).then { code }
		end
	end
end
