# frozen_string_literal: true

require "value_semantics/monkey_patched"

class SIM
	value_semantics do
		iccid(/\A\d+\Z/)
		lpa_code Either(/\ALPA:/, nil), default: nil
		remaining_usage_kb Integer
		remaining_days Integer
		notes String
		nickname Either(String, nil), default: nil
	end

	def self.extract(kwargs)
		kwargs = kwargs&.transform_keys(&:to_sym) || {}
		new(kwargs.slice(
			:iccid, :lpa_code, :remaining_usage_kb, :remaining_days, :notes, :nickname
		))
	end

	def remaining_usage_mb
		(remaining_usage_kb / 1024.0).round(2)
	end

	def to_s
		if nickname
			"#{nickname} (#{iccid}) : #{remaining_usage_mb} MB"
		else
			"#{iccid} : #{remaining_usage_mb} MB"
		end
	end
end
