# frozen_string_literal: true

class CustomWizard::FieldSerializer < ::ApplicationSerializer
  attributes :id,
             :index,
             :type,
             :required,
             :value,
             :label,
             :placeholder,
             :description,
             :image,
             :file_types,
             :format,
             :limit,
             :property,
             :content,
             :tag_groups,
             :can_create_tag,
             :category,
             :validations,
             :max_length,
             :char_counter,
             :preview_template

  def id
    object.id
  end

  def index
    object.index
  end

  def type
    object.type
  end

  def required
    object.required
  end

  def value
    object.value
  end

  def label
    I18n.t("#{i18n_key}.label", default: object.label, base_url: Discourse.base_url)
  end

  def include_label?
    label.present?
  end

  def description
    I18n.t("#{i18n_key}.description", default: object.description, base_url: Discourse.base_url)
  end

  def include_description?
    description.present?
  end

  def placeholder
    I18n.t("#{i18n_key}.placeholder", default: object.placeholder)
  end

  def include_placeholder?
    placeholder.present?
  end

  def image
    object.image
  end

  def include_image?
    object.image.present?
  end

  def file_types
    object.file_types
  end

  def format
    object.format
  end

  def limit
    object.limit
  end

  def property
    object.property
  end

  def content
    object.content
  end

  def tag_groups
    object.tag_groups
  end

  def can_create_tag
    object.can_create_tag
  end

  def validations
    validations = {}
    object.validations&.each do |type, props|
      next unless props["status"]
      validations[props["position"]] ||= {}
      validations[props["position"]][type] = props.merge CustomWizard::RealtimeValidation.types[
                    type.to_sym
                  ]
    end

    validations
  end

  def max_length
    object.max_length
  end

  def char_counter
    object.char_counter
  end

  def preview_template
    object.preview_template
  end

  protected

  def i18n_key
    @i18n_key ||= "#{object.step.wizard.id}.#{object.step.id}.#{object.id}".underscore
  end

  def subscribed?
    @subscribed ||= CustomWizard::Subscription.subscribed?
  end
end
