<?php
/** Options
 *
 * @package BW-Mailchimp
 */

namespace BwMailchimp;

if ( ! class_exists( __NAMESPACE__ . '\Options' ) ) {
	/**
	 * Manages options used to configure the plugin.
	 */
	class Options {
		/**
		 * WordPress option name for BwMailchimp options
		 *
		 * @var array
		 */
		public static $option = 'bw_mailchimp_options';

		/**
		 * BwMailchimp allowed options
		 *
		 * @var array
		 */
		protected static $keys = array(
			'database_version',
			'mailchimp_api_key',
			'mailchimp_server',
			'mailchimp_list_id',
			'last_csv_palms',
			'last_csv_sands',
			'last_csv_shoreclub'
		);

		/**
		 * BwMailchimp option default values
		 *
		 * @var array
		 */
		public static $defaults = array(
			'database_version' => '0.0.0',
			'mailchimp_api_key' => '',
			'mailchimp_server' => '',
			'mailchimp_list_id' => '',
			'last_csv_palms' => '0000-00-00',
			'last_csv_sands' => '0000-00-00',
			'last_csv_shoreclub' => '0000-00-00'
		);
		/**
		 * Gets the BwMailchimp options.
		 *
		 * @return array BwMailchimp options.
		 */
		public static function get_options() {
			$options = get_option( self::$option, null );

			if ( ! is_array( $options ) ) {
				return self::$defaults;
			}

			foreach ( self::$defaults as $key => $value ) {
				if ( ! isset( $options[ $key ] ) ) {
					$options[ $key ] = $value;
				}
			}
			return $options;
		}

		/**
		 * Updates the BwMailchimp options
		 *
		 * @param array $update Options to update.
		 *
		 * @return array BwMailchimp options.
		 */
		public static function update_options( $update ) {
			$options = self::get_options();

			foreach ( self::$keys as $key ) {
				if ( isset( $update[ $key ] ) ) {
					$options[ $key ] = $update[ $key ];
				}
			}

			update_option( self::$option, $options );
			return $options;
		}

		/**
		 * Gets a single BwMailchimp option
		 *
		 * @param string $key  The option name.
		 *
		 * @return mixed
		 */
		public static function get_option( $key ) {
			$options = self::get_options();
			return isset( $options[ $key ] ) ? $options[ $key ] : null;
		}

		/**
		 * Updates a single BwMailchimp option
		 *
		 * @param string $key  The option name.
		 * @param mixed  $value The option value.
		 */
		public static function update_option( $key, $value ) {
			$options         = self::get_options();
			$options[ $key ] = $value;
			self::update_options( $options );
		}
	}
}
