<?php

namespace Data443\LGPD\Options;

/**
 * Parent class for options.
 * Adapted from https://carlalexander.ca/designing-classes-wordpress-options-api/
 *
 * Class OptionsBase
 *
 * @package Data443\LGPD\Options
 */
abstract class OptionsBase {

	/* @var string */
	protected $prefix = 'lgpd_';

	/**
	 * Auto-prefix all options
	 *
	 * @param $name
	 * @return string
	 */
	public function prefix( $name ) {
		// Check for accidental duplicate prefix
		if ( '' === strpos( $name, $this->prefix ) ) {
			trigger_error( "You appear to have a duplicate prefix for option {$name}", E_USER_NOTICE );
			return $name;
		}

		return $this->prefix . $name;
	}

	/**
	 * Checks if the option with the given name exists or not.
	 *
	 * @param string $name
	 *
	 * @return bool
	 */
	public function has( $name ) {
		return null !== $this->get( $name );
	}

	/**
	 * Gets the option for the given name. Returns the default value if the value does not exist.
	 *
	 * @param string $name
	 * @param mixed  $default
	 *
	 * @return mixed
	 */
	abstract public function get( $name, $default = null);

	/**
	 * Removes the option with the given name.
	 *
	 * @param string $name
	 */
	abstract public function delete( $name);

	/**
	 * Sets an option. Overwrites the existing option if the name is already in use.
	 *
	 * @param string $name
	 * @param mixed  $value
	 */
	abstract public function set( $name, $value);
}
