# frozen_string_literal: true

class AdminNotices::Dismiss
  include Service::Base

  policy :invalid_access

  params do
    attribute :id, :integer

    validates :id, presence: true
  end

  model :admin_notice, optional: true

  transaction do
    step :destroy
    step :reset_problem_check
  end

  private

  def invalid_access(guardian:)
    guardian.is_admin?
  end

  def fetch_admin_notice(params:)
    AdminNotice.find_by(id: params.id)
  end

  def destroy(admin_notice:)
    return if admin_notice.blank?

    admin_notice.destroy!
  end

  def reset_problem_check(admin_notice:)
    return if admin_notice.blank?

    ProblemCheckTracker.find_by(identifier: admin_notice.identifier)&.reset
  end
end