1# frozen_string_literal: true
 2
 3require "value_semantics/monkey_patched"
 4
 5class SIM
 6	value_semantics do
 7		iccid(/\A\d+\Z/)
 8		lpa_code Either(/\ALPA:/, nil), default: nil
 9		remaining_usage_kb Integer
10		remaining_days Integer
11		notes String
12		nickname Either(String, nil), default: nil
13	end
14
15	def self.extract(kwargs)
16		kwargs = kwargs&.transform_keys(&:to_sym) || {}
17		new(kwargs.slice(
18			:iccid, :lpa_code, :remaining_usage_kb, :remaining_days, :notes, :nickname
19		))
20	end
21
22	def remaining_usage_mb
23		(remaining_usage_kb / 1024.0).round(2)
24	end
25
26	def to_s
27		if nickname
28			"#{nickname} (#{iccid}) : #{remaining_usage_mb} MB"
29		else
30			"#{iccid} : #{remaining_usage_mb} MB"
31		end
32	end
33end