<?php
/*
 * Jetpack CRM
 * https://jetpackcrm.com
 * V4.5
 */

defined( 'ZEROBSCRM_PATH' ) || exit( 0 );

/*
 * This Parent class allows us to simplify what's needed of each condition into a class below
*/
class zeroBSCRM_segmentCondition {

	public $key             = false;
	public $condition       = false;
	public $superseded_keys = array();

	// killswitch
	private $addFilters = true;

	/**
	 * Jetpack CRM Segment Argument Constructor.
	 */
	public function __construct( $constructionArgs = array() ) {

		// in children we play with the order here (preConstructor)
		// so it's separated into an init func
		$this->init( $constructionArgs );
	}

	public function init( $constructionArgs = array() ) {

		global $zbs;

		if ( $this->addFilters && $this->key !== false && is_array( $this->condition ) ) {

			// __ name, category, description etc.
			if ( isset( $this->condition['name'] ) ) {
				$this->condition['name'] = __( $this->condition['name'], 'zero-bs-crm' );
			}
			if ( isset( $this->condition['category'] ) ) {
				$this->condition['category'] = __( $this->condition['category'], 'zero-bs-crm' );
			}
			if ( isset( $this->condition['description'] ) ) {
				$this->condition['description'] = __( $this->condition['description'], 'zero-bs-crm' );
			}

			// add the condition
			add_filter( 'zbs_segment_conditions', array( $this, 'condition' ) );

			// add the query arg builder
			add_filter( $zbs->DAL->makeSlug( $this->key ) . '_zbsSegmentArgumentBuild', array( $this, 'conditionArg' ), 10, 3 );

			// any conditions that this supersedes get filters added too, to ensure backward compatibility (though these should be migrated too)
			if ( is_array( $this->superseded_keys ) ) {

				foreach ( $this->superseded_keys as $key ) {

					// add filter
					add_filter( $key . '_zbsSegmentArgumentBuild', array( $this, 'condition_arg_superseded' ), 10, 3 );

				}
			}
		}
	}

	public function condition( $conditions = array() ) {

		if ( $this->key !== false && is_array( $this->condition ) ) {

			return array_merge( $conditions, array( $this->key => $this->condition ) );

		}

		// else don't add
		return $conditions;
	}

	// note starting arg is ignored (should not have been called multiple times)
	public function conditionArg( $startingArg = false, $condition = false, $conditionKeySuffix = false ) {

		global $zbs, $wpdb, $ZBSCRM_t;

		return $startingArg;
	}

	/*
	 * This fires when a superseded condition key has been used
	 * It'll migrate the key in the db then return as `conditionArg()`
	 */
	public function condition_arg_superseded( $startingArg = false, $condition = false, $conditionKeySuffix = false ) {

		global $zbs;

		// migrate to avoid future reoccurances
		$zbs->DAL->segments->migrate_superseded_condition( $condition['type'], $this->key );

		// return conditionArg as if normal
		return $this->conditionArg( $startingArg, $condition, $conditionKeySuffix );
	}
}
