# frozen_string_literal: true

class REST::Admin::AccountSerializer < ActiveModel::Serializer
  attributes :id, :username, :domain, :created_at,
             :email, :ip, :confirmed, :suspended,
             :silenced, :sensitized, :disabled, :approved, :locale,
             :invite_request

  attribute :created_by_application_id, if: :created_by_application?
  attribute :invited_by_account_id, if: :invited?

  has_many :ips, serializer: REST::Admin::IpSerializer
  has_one :account, serializer: REST::AccountSerializer
  has_one :role, serializer: REST::RoleSerializer

  def id
    object.id.to_s
  end

  def email
    object.user_email
  end

  def role
    object.user_role
  end

  def suspended
    object.suspended?
  end

  def silenced
    object.silenced?
  end

  def sensitized
    object.sensitized?
  end

  def confirmed
    object.user_confirmed?
  end

  def disabled
    object.user_disabled?
  end

  def approved
    object.user_approved?
  end

  def account
    object
  end

  def locale
    object.user_locale
  end

  def created_by_application_id
    object.user&.created_by_application_id&.to_s&.presence
  end

  def invite_request
    object.user&.invite_request&.text
  end

  def invited_by_account_id
    object.user&.invite&.user&.account_id&.to_s&.presence
  end

  def invited?
    object.user&.invited?
  end

  def created_by_application?
    object.user&.created_by_application_id&.present?
  end

  def ips
    object.user&.ips
  end

  def ip
    ips&.first&.ip
  end
end
