<?php
/**
 * Review Object
 *
 * @package     MBDB
 * @copyright   Copyright (c) 2015, Mooberry Dreams
 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 * @since       3.5 ?
*/

// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) exit;

/**
 * Mooberry_Book_Manager_Review Class
 *
 * @since 3.5 ?
 */
 class Mooberry_Book_Manager_Review {



	private $reviewer_name;
	private $url;
	private $website_name;
	private $review;

	public function __construct( $review = null ) {
		$this->review_name = '';
		$this->url = '';
		$this->website_name = '';
		$this->review = '';
		if ( $review == null ) {
			return;
		}
		$this->reviewer_name =  isset($review[ 'reviewer_name' ]) ? $review['reviewer_name'] : '';
		$this->url =  isset($review[ 'url' ] ) ? $review['url'] : '';
		$this->website_name =  isset($review[ 'website_name' ]) ? $review['website_name'] : '';
		$this->review =  isset($review[ 'review' ]) ? $review['review'] : '';
	}

	public function to_json() {
		$properties =  get_object_vars($this);
		$object = array();
		foreach ( $properties as $name => $value ) {
			$object[ $name ] =   $value ;
		}
		return json_encode( $object);

    }

	public function import( $json_string ) {
		$decoded = json_decode( $json_string );
		$properties =  get_object_vars($this);
		foreach ( $properties as $name => $value ) {

				$this->$name =   $decoded->$name;

		}
	}


	/**
	 * Magic __get function to dispatch a call to retrieve a private property
	 *
	 * @since 1.0
	 */
	public function __get( $key ) {

		if( method_exists( $this, 'get_' . $key ) ) {

			return call_user_func( array( $this, 'get_' . $key ) );

		} else {

			if ( property_exists( $this, $key ) ) {

				$ungettable_properties = array(  );

				if ( !in_array( $key, $ungettable_properties ) ) {

					return $this->$key;

				}

			}

		}

		return new WP_Error( 'mbdb-invalid-property', sprintf( __( 'Can\'t get property %s', 'mooberry-book-manager' ), $key ) );

	}

	/**
	 * Magic __set function to dispatch a call to retrieve a private property
	 *
	 * @since 1.0
	 */
	public function __set( $key, $value ) {

		if( method_exists( $this, 'set_' . $key ) ) {

			return call_user_func( array( $this, 'set_' . $key ), $key, $value );

		} else {

			if ( property_exists( $this, $key ) ) {

				$unsettable_properties = array( );

				if ( !in_array( $key, $unsettable_properties ) ) {

					$this->$key = $value;

				}

			}
		}

		return new WP_Error( 'mbdb-invalid-property', sprintf( __( 'Can\'t get property %s', 'mooberry-book-manager' ), $key ) );

	}
}
