<?php
	/**
	 * @package     Freemius
	 * @copyright   Copyright (c) 2015, Freemius, Inc.
	 * @license     https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
	 * @since       1.0.3
	 */

	if ( ! defined( 'ABSPATH' ) ) {
		exit;
	}

	class FS_Plugin extends FS_Scope_Entity {
		/**
		 * @since 1.0.6
		 * @var null|number
		 */
		public $parent_plugin_id;
		/**
		 * @var string
		 */
		public $title;
		/**
		 * @var string
		 */
		public $slug;
		/**
		 * @author Leo Fajardo (@leorw)
		 * @since 2.2.1
		 *
		 * @var string
		 */
		public $premium_slug;
		/**
		 * @since 1.2.2
		 *
		 * @var string 'plugin' or 'theme'
		 */
		public $type;
		/**
		 * @author Leo Fajardo (@leorw)
		 *
		 * @since  1.2.3
		 *
		 * @var string|false false if the module doesn't have an affiliate program or one of the following: 'selected', 'customers', or 'all'.
		 */
		public $affiliate_moderation;
		/**
		 * @var bool Set to true if the free version of the module is hosted on WordPress.org. Defaults to true.
		 */
		public $is_wp_org_compliant = true;
		/**
		 * @author Leo Fajardo (@leorw)
		 * @since 2.2.5
		 *
		 * @var int
		 */
		public $premium_releases_count;

		#region Install Specific Properties

		/**
		 * @var string
		 */
		public $file;
		/**
		 * @var string
		 */
		public $version;
		/**
		 * @var bool
		 */
		public $auto_update;
		/**
		 * @var FS_Plugin_Info
		 */
		public $info;
		/**
		 * @since 1.0.9
		 *
		 * @var bool
		 */
		public $is_premium;
		/**
		 * @author Leo Fajardo (@leorw)
		 * @since 2.2.1
		 *
		 * @var string
		 */
		public $premium_suffix;
		/**
		 * @since 1.0.9
		 *
		 * @var bool
		 */
		public $is_live;
		/**
		 * @since 2.2.3
		 * @var null|number
		 */
		public $bundle_id;
		/**
		 * @since 2.3.1
		 * @var null|string
		 */
		public $bundle_public_key;
		/**
		 * @since 2.5.4
		 * @var null|array
		 */
		public $opt_in_moderation;

		const AFFILIATE_MODERATION_CUSTOMERS = 'customers';

		#endregion Install Specific Properties

		/**
		 * @param stdClass|bool $plugin
		 */
		function __construct( $plugin = false ) {
			parent::__construct( $plugin );

			$this->is_premium = false;
			$this->is_live    = true;

			if ( empty( $this->premium_slug ) && ! empty( $plugin->slug ) ) {
				$this->premium_slug = "{$this->slug}-premium";
			}

			if ( empty( $this->premium_suffix ) ) {
				$this->premium_suffix = '(Premium)';
			}

			if ( isset( $plugin->info ) && is_object( $plugin->info ) ) {
				$this->info = new FS_Plugin_Info( $plugin->info );
			}
		}

		/**
		 * Check if plugin is an add-on (has parent).
		 *
		 * @author Vova Feldman (@svovaf)
		 * @since  1.0.6
		 *
		 * @return bool
		 */
		function is_addon() {
			return isset( $this->parent_plugin_id ) && is_numeric( $this->parent_plugin_id );
		}

		/**
		 * @author Leo Fajardo (@leorw)
		 * @since  1.2.3
		 *
		 * @return bool
		 */
		function has_affiliate_program() {
			return ( ! empty( $this->affiliate_moderation ) );
		}

		static function get_type() {
			return 'plugin';
		}
	}