<?php
/**
 * @brief		Notification Options
{subpackage}
 * @since		{date}
 */

namespace IPS\{app}\extensions\core\Notifications;

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
	exit;
}

/**
 * Notification Options
 */
class _{class}
{
	/**
	 * Get fields for configuration
	 *
	 * @param	\IPS\Member|null	$member		The member (to take out any notification types a given member will never see) or NULL if this is for the ACP
	 * @return	array
	 */
	public static function configurationOptions( \IPS\Member $member = NULL ): array
	{
		// Return an array defining each notification type, including the form elements necessary to allow its configuration
		
		return array(
			'setting_key'		=> array(
				'type'				=> 'custom',
				'adminCanSetDefault'=> TRUE,
				'field'				=> \IPS\Helpers\Form\CheckboxSet( 'setting_key', $defaultValue, FALSE, /*...*/ ),
				'admin_lang'		=> array(
					'header'			=> 'header_lang_key',
					'title'				=> 'header_lang_title',
				),
			),
			'other_setting_key'	=> array(
				'type'				=> 'custom',
				'adminCanSetDefault'=> FALSE,
				'field'				=> $formField, 
			),
			'separator1'	=> array(
				'type'				=> 'separator',
			),
			//...
		);
	}

	/**
	 * Save "extra" value
	 *
	 * @param	\IPS\Member|NULL	$member	The member or NULL if this is the admin setting defaults
	 * @param	string				$key	The key
	 * @param	bool				$value	The value
	 * @return	void
	 */
	public static function saveExtra( ?\IPS\Member $member, $key, $value )
	{
		// You can perform extra processing here to save values in a specific manner if needed
	}

	/**
	 * Disable all "extra" values for a particular type
	 *
	 * @param	\IPS\Member|NULL	$member	The member or NULL if this is the admin setting defaults
	 * @param	string				$method	The method type
	 * @return	void
	 */
	public static function disableExtra( ?\IPS\Member $member, $method )
	{
		// You can disable extra values for a given type, such as if a setting means the notification preference is irrelevant
	}

	/**
	 * Reset "extra" value to the default for all accounts
	 *
	 * @return	void
	 */
	public static function resetExtra()
	{
		// Any extra processing you may need to perform when resetting all members to default notification options.
		// Typically you won't have to do anything here unless you have custom settings
	}
	
	// For each type of notification you need a method like this which controls what will be displayed when the user clicks on the notification icon in the header:
	// Note that for each type of notification you must *also* create email templates. See documentation for details: https://remoteservices.scriptz-team/docs/devdocs-notifications
	
	/**
	 * Parse notification: key
	 *
	 * @param	\IPS\Notification\Inline	$notification	The notification
	 * @param	bool						$htmlEscape		TRUE to escape HTML in title
	 * @return	array
	 * @code
	 return array(
		 'title'		=> "Mark has replied to A Topic",	// The notification title
		 'url'			=> \IPS\Http\Url::internal( ... ),	// The URL the notification should link to
		 'content'		=> "Lorem ipsum dolar sit",			// [Optional] Any appropriate content. Do not format this like an email where the text
		 													// 	 explains what the notification is about - just include any appropriate content.
		 													// 	 For example, if the notification is about a post, set this as the body of the post.
		 'author'		=>  \IPS\Member::load( 1 ),			// [Optional] The user whose photo should be displayed for this notification
	 );
	 * @endcode
	 */
	public function parse_key( \IPS\Notification\Inline $notification, $htmlEscape=TRUE ): array
	{
		return array(
			'title'		=> "Mark has replied to A Topic",	// The notification title
			'url'			=> \IPS\Http\Url::internal( '' ),	// The URL the notification should link to
			'content'		=> "Lorem ipsum dolar sit",			// [Optional] Any appropriate content. Do not format this like an email where the text
																// 	 explains what the notification is about - just include any appropriate content.
																// 	 For example, if the notification is about a post, set this as the body of the post.
			'author'		=>  \IPS\Member::load( 1 ),			// [Optional] The user whose photo should be displayed for this notification
		);
	}
}