# frozen_string_literal: true

require "date_core"
require "value_semantics/monkey_patched"
require_relative "./validators"

class DbPort
	module Status
		SUBMITTED = "SUBMITTED"
		COMPLETE = "COMPLETE"
	end

	value_semantics do
		id String
		actual_foc_date Either(DateTime, nil), default: nil, coerce: true
		updated_at DateTime, coerce: true
		tel ValidTelString
		customer_id String
		backend_sgx String
	end

	def processing_status
		if actual_foc_date&.< DateTime.now
			Status::COMPLETE
		else
			Status::SUBMITTED
		end
	end

	def self.coerce_actual_foc_date(time)
		time&.to_datetime
	end

	def self.coerce_updated_at(raw)
		raw.to_datetime
	end

	def self.from(**kwargs)
		new(**kwargs)
	end
end
