# frozen_string_literal: true

module Notifications
  class PushToCommunicationChannelService
    extend Service

    WHITELISTED_ITEM_TYPES = %w(SystemNotification).freeze

    attr_reader :errors

    def initialize(item_id:, item_type:)
      @item_type = item_type
      @item = item_type.constantize.find item_id
      @errors = {}
    end

    def call
      return self unless valid?

      "Notifications::Handle#{@item_type}InCommunicationChannelService".constantize.call(@item)
      self
    end

    def succeed?
      @errors.none?
    end

    private

    def valid?
      raise 'Dont know how to handle this type of items' unless WHITELISTED_ITEM_TYPES.include?(@item_type)

      if @item.nil?
        @errors[:invalid_arguments] = 'Can\'t find item' if @item.nil?
        return false
      end
      true
    end
  end
end