module Icalendar::Values::Helpers::TimeWithZone

def __getobj__

def __getobj__
  orig_value = super
  if set_offset?
    orig_value
  else
    new_value = Icalendar::Offset.build(orig_value, ical_params, timezone_store)&.normalized_value
    __setobj__(new_value) unless new_value.nil?
    new_value || orig_value
  end
end

def initialize(value, params = {})

def initialize(value, params = {})
  params = Icalendar::DowncasedHash(params)
  @tz_utc = params['tzid'] == 'UTC'
  @timezone_store = params.delete 'x-tz-store'
  offset = Icalendar::Offset.build(value, params, timezone_store)
  @offset_value = offset&.normalized_value
  params['tzid'] = offset.normalized_tzid if offset
  super (@offset_value || value), params
end

def params_ical

def params_ical
  ical_params.delete 'tzid' if tz_utc
  super
end

def set_offset?

def set_offset?
  !!@offset_value
end