# frozen_string_literal: true

class UserBookmarkBaseSerializer < ApplicationSerializer
  attributes :id,
             :created_at,
             :updated_at,
             :name,
             :reminder_at,
             :reminder_at_ics_start,
             :reminder_at_ics_end,
             :pinned,
             :title,
             :fancy_title,
             :excerpt,
             :bookmarkable_id,
             :bookmarkable_type,
             :bookmarkable_url

  def title
    raise NotImplementedError
  end

  def fancy_title
    raise NotImplementedError
  end

  def cooked
    raise NotImplementedError
  end

  def bookmarkable_url
    raise NotImplementedError
  end

  def excerpt
    raise NotImplementedError
  end

  def include_reminder_at_ics_start?
    reminder_at.present?
  end

  def include_reminder_at_ics_end?
    reminder_at.present?
  end

  def reminder_at_ics_start
    object.reminder_at_ics
  end

  def reminder_at_ics_end
    object.reminder_at_ics(offset: 1.hour)
  end

  # Note: This assumes that the bookmarkable has a user attached to it,
  # we may need to revisit this assumption at some point.
  has_one :user, serializer: BasicUserSerializer, embed: :objects

  def user
    bookmarkable_user
  end

  private

  def bookmarkable
    object.bookmarkable
  end
end