<?php
/**
 * Notification interface for implementing notification types.
 *
 * @package Awesomemotive\Rewardswp\Interfaces
 * @since 1.0.0
 */

namespace Awesomemotive\Rewardswp\Interfaces;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Interface NotificationInterface
 *
 * This interface defines the basic contract for all notification types.
 *
 * @since 1.0.0
 */
interface NotificationInterface {
	/**
	 * Must return a unique notification name.
	 *
	 * @since 1.0.0
	 *
	 * @return string
	 */
	public function get_name(): string;

	/**
	 * Set the data used to replace placeholders in the content.
	 *
	 * @param array $data A 2D associative array with key-value pairs for placeholder replacements.
	 *
	 * @return self Returns the instance of the implementing class.
	 */
	public function set_data( array $data ): self;

	/**
	 * Retrieve the array of data to replace the content placeholders.
	 *
	 * @since 1.0.0
	 *
	 * @return array Data to replace placeholders.
	 */
	public function get_data(): array;

	/**
	 * Retrieve the notification content.
	 *
	 * @return string
	 */
	public function get_content(): string;

	/**
	 * A method to send a notification.
	 *
	 * @return bool
	 */
	public function send(): bool;
}
