<?php
/**
 * Event Status
 *
 * @author    ThemeBoy
 * @category  Modules
 * @package   SportsPress/Modules
 * @version   2.7.9
 */

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

if ( ! class_exists( 'SportsPress_Event_Status' ) ) :

	/**
	 * Main SportsPress Event Status Class
	 *
	 * @class SportsPress_Event_Status
	 * @version 2.1
	 */
	class SportsPress_Event_Status {

		/**
		 * @var array
		 */
		public $statuses = array();

		/**
		 * Constructor
		 */
		public function __construct() {
			// Define constants
			$this->define_constants();

			add_action( 'init', array( $this, 'get_statuses' ) );
			add_action( 'post_submitbox_misc_actions', array( $this, 'section' ) );
			add_action( 'sportspress_process_sp_event_meta', array( $this, 'save' ), 10, 1 );
			add_filter( 'sportspress_event_time', array( $this, 'filter' ), 10, 2 );
			add_filter( 'sportspress_event_time_admin', array( $this, 'filter' ), 10, 2 );
			add_filter( 'sportspress_main_results_or_time', array( $this, 'filter_array' ), 10, 2 );
			add_filter( 'sportspress_event_blocks_team_result_or_time', array( $this, 'filter_array' ), 10, 2 );
		}

		/**
		 * Define constants.
		 */
		private function define_constants() {
			if ( ! defined( 'SP_EVENT_STATUS_VERSION' ) ) {
				define( 'SP_EVENT_STATUS_VERSION', '2.1' );
			}

			if ( ! defined( 'SP_EVENT_STATUS_URL' ) ) {
				define( 'SP_EVENT_STATUS_URL', plugin_dir_url( __FILE__ ) );
			}

			if ( ! defined( 'SP_EVENT_STATUS_DIR' ) ) {
				define( 'SP_EVENT_STATUS_DIR', plugin_dir_path( __FILE__ ) );
			}
		}

		/**
		 * Define statuses.
		 */
		public function get_statuses() {
			$this->statuses = apply_filters(
				'sportspress_event_statuses',
				array(
					'ok'        => esc_attr__( 'On time', 'sportspress' ),
					'tbd'       => esc_attr__( 'TBD', 'sportspress' ),
					'postponed' => esc_attr__( 'Postponed', 'sportspress' ),
					'cancelled' => esc_attr__( 'Canceled', 'sportspress' ),
				)
			);
		}

		/**
		 * Add status section to submit box.
		 */
		public function section() {
			if ( 'sp_event' !== get_post_type() ) {
				return;
			}
			$status = get_post_meta( get_the_ID(), 'sp_status', true );
			if ( ! $status ) {
				$status = 'ok';
			}
			?>
		<div class="misc-pub-section sp-pub-event-status">
			<span class="sp-event-status"><?php esc_attr_e( 'Time:', 'sportspress' ); ?> <strong class="sp-event-status-display" data-sp-event-status="<?php echo esc_attr( $status ); ?>"><?php echo wp_kses_post( $this->statuses[ $status ] ); ?></strong></span>
			<a href="#" class="sp-edit-event-status hide-if-no-js"><span aria-hidden="true"><?php esc_attr_e( 'Edit', 'sportspress' ); ?></span> <span class="screen-reader-text"><?php esc_attr_e( 'Edit status' ); ?></span></a>
			<div class="sp-event-status-select hide-if-js">
				<?php foreach ( $this->statuses as $value => $label ) { ?>
					<label><input type="radio" name="sp_status" value="<?php echo esc_attr( $value ); ?>" data-sp-event-status="<?php echo esc_attr( $label ); ?>" <?php checked( $status, $value ); ?>> <?php echo wp_kses_post( $label ); ?></label><br>
				<?php } ?>
				<p>
					<a href="#" class="sp-save-event-status hide-if-no-js button">OK</a>
					<a href="#" class="sp-cancel-event-status hide-if-no-js button-cancel">Cancel</a>
				</p>
			</div>
		</div>
			<?php
		}

		/**
		 * Save status option.
		 */
		public function save( $post_id ) {
			update_post_meta( $post_id, 'sp_status', sp_array_value( $_POST, 'sp_status', 'ok' ) );
		}

		/**
		 * Event time filter.
		 */
		public function filter( $time, $post_id = 0 ) {
			if ( ! $post_id ) {
				$post_id = get_the_ID();
			}
			$status = get_post_meta( $post_id, 'sp_status', true );
			if ( ! $status || 'ok' === $status || ! array_key_exists( $status, $this->statuses ) ) {
				return $time;
			}
			return $this->statuses[ $status ];
		}

		/**
		 * Event time array filter.
		 */
		public function filter_array( $array, $post_id = 0 ) {
			if ( ! $post_id ) {
				$post_id = get_the_ID();
			}
			$status = get_post_meta( $post_id, 'sp_status', true );
			if ( ! $status || 'ok' === $status || ! array_key_exists( $status, $this->statuses ) ) {
				return $array;
			}
			return array( $this->statuses[ $status ] );
		}
	}

endif;

new SportsPress_Event_Status();
