class Maglev::Uikit::Form::LinkComponent

def self.default_link_type_klass

def self.default_link_type_klass
  Maglev::Uikit::Form::Link::UrlLinkComponent
end

def self.link_type_component(input_name:, value:, path:)

def self.link_type_component(input_name:, value:, path:)
  # Default to url if the link type is not found (shouldn't happen)
  klass = link_type_klasses_map.fetch(value[:link_type]&.to_sym, default_link_type_klass)
  return unless klass
  klass.new(input_name: input_name, link: value, path: path)
end

def self.link_type_klasses_map

def self.link_type_klasses_map
  {
    email: Maglev::Uikit::Form::Link::EmailLinkComponent,
    url: Maglev::Uikit::Form::Link::UrlLinkComponent,
    page: Maglev::Uikit::Form::Link::PageLinkComponent,
    static_page: Maglev::Uikit::Form::Link::StaticPageLinkComponent
  }
end

def dom_id

def dom_id
  name.to_s.parameterize.underscore
end

def error

def error
  options[:error]
end

def initialize(name:, path:, options: {})

Value: { link_type:, link_id:, href:, text: }
def initialize(name:, path:, options: {})
  @name = name
  @options = options
  @path = path.gsub(':id', dom_id)
end

def label

def label
  options[:label]
end

def link_text

def link_text
  {
    name: "#{name}[text]",
    value: value[:text],
    placeholder: t('maglev.uikit.form.link.text_placeholder')
  }.merge(options[:link_text] || {})
end

def link_type_component

def link_type_component
  self.class.link_type_component(input_name: name, value: value, path: path)
end

def placeholder

def placeholder
  options[:placeholder].presence || t('maglev.uikit.form.link.placeholder')
end

def turbo_frame_id

def turbo_frame_id
  "#{dom_id}-frame"
end

def value

def value
  (options[:value] || {}).with_indifferent_access
end

def value?

def value?
  value&.compact_blank.present?
end

def with_text?

def with_text?
  !!options[:with_text]
end