<?php

namespace Data443\LGPD\Options;

/**
 * Main class for handling options on a non-multisite install.
 * Adapted from https://carlalexander.ca/designing-classes-wordpress-options-api/
 *
 * Class Options
 *
 * @package Data443\LGPD\Options
 */
class Options extends OptionsBase {

	/**
	 * 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
	 */
	public function get( $name, $default = null, $enableFilter = true ) {
		$value = get_option( $this->prefix( $name ), $default );

		if ( $enableFilter ) {
			$value = apply_filters( "lgpd/options/get/{$name}", $value );
		}

		if ( is_array( $default ) && ! is_array( $value ) ) {
			$value = (array) $value;
		}

		return $value;
	}

	/**
	 * Sets an option. Overwrites the existing option if the name is already in use.
	 *
	 * @param string $name
	 * @param mixed  $value
	 */
	public function set( $name, $value, $enableFilter = true ) {
		if ( $enableFilter ) {
			$value = apply_filters( "lgpd/options/set/{$name}", $value, get_option( $this->prefix( $name ) ) );
		}

		update_option(
			$this->prefix( $name ),
			$value,
			false
		);
	}

	/**
	 * Removes the option with the given name.
	 *
	 * @param string $name
	 */
	public function delete( $name ) {
		delete_option( $this->prefix( $name ) );
	}
}
