<?php
/*
 * Jetpack CRM
 * https://jetpackcrm.com
 * V2.52+
 *
 * Copyright 2020 Automattic
 *
 * Date: 19/03/18
 */

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

class zeroBSCRM_TagManager {

	private $objTypeID = false;

	// following all set by objTypeID pass, v3.0+
	private $objType  = false;
	private $singular = false;
	private $plural   = false;
	// v3.0 this was removed private $postType = false; // set in child class 'zerobs_customer' // ONLY USED IN save funcs etc. maybe, potentially just legacy now.
	// renamed 'listViewSlug' v3.0+ private $postPage = false;
	private $listViewSlug = false;

	// except these:
	private $langLabels = false;
	private $extraBoxes = '';

	function __construct( $args = array() ) {

		#} =========== LOAD ARGS ==============
		$defaultArgs = array(

			'objTypeID'    => false,   // 5 (v3.0+)

			'objType'      => false,   // transaction
			'singular'     => false,  // Transaction
			'plural'       => false,      // Transactions
			// 'postType' => false,    //zerobs_transaction - removed v3.0 +
			// renamed 'listViewSlug' v3.0+ 'postPage' => false,    //manage-transactions-tags
			'listViewSlug' => false,
			'langLabels'   => array(),
			'extraBoxes'   => '', // html for extra boxes e.g. upsells :)

		);
		foreach ( $defaultArgs as $argK => $argV ) {
			$$argK = $argV;
			if ( is_array( $args ) && isset( $args[ $argK ] ) ) {
				if ( is_array( $args[ $argK ] ) ) {
					$newData = $$argK;
					if ( ! is_array( $newData ) ) {
						$newData = array();
					} foreach ( $args[ $argK ] as $subK => $subV ) {
						$newData[ $subK ] = $subV;
					}$$argK = $newData;
				} else {
					$$argK = $args[ $argK ]; }
			}
		}
		#} =========== / LOAD ARGS =============
		global $zbs;

		// we load from DAL defaults, if objType passed (overriding anything passed, if empty/false)
		if ( ! empty( $objTypeID ) ) { // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase

			$objTypeID = (int) $objTypeID;
			if ( $objTypeID > 0 ) {
				// obj type (contact)
				$objTypeStr = $zbs->DAL->objTypeKey( $objTypeID );
				if ( ( ! isset( $this->objType ) || $this->objType == false ) && ! empty( $objTypeStr ) ) {
					$this->objType = $objTypeStr;
				}

				// singular
				$objSingular = $zbs->DAL->typeStr( $objTypeID );
				if ( ( ! isset( $this->singular ) || $this->singular == false ) && ! empty( $objSingular ) ) {
					$this->singular = $objSingular;
				}

				// plural
				$objPlural = $zbs->DAL->typeStr( $objTypeID, true );
				if ( ( ! isset( $this->plural ) || $this->plural == false ) && ! empty( $objPlural ) ) {
					$this->plural = $objPlural;
				}

				// listViewSlug
				$objSlug = $zbs->DAL->listViewSlugFromObjID( $objTypeID );
				if ( ( ! isset( $this->listViewSlug ) || $this->listViewSlug == false ) && ! empty( $objSlug ) ) {
					$this->listViewSlug = $objSlug;
				}
			}
		}

		// anything to save?
		$this->catchPost();
	}

	public function catchPost() {

		// If post, fire do_action
		if ( isset( $_POST['zbs-tag-form-master'] ) && $_POST['zbs-tag-form-master'] == $this->objType ) {

			// fire it
			do_action( 'zerobs_save_' . $this->objType . '_tags', $this->objID, $this->obj );

		}
	}

	public function drawTagView() {

		if ( empty( $this->objType ) || empty( $this->listViewSlug ) || empty( $this->singular ) || empty( $this->plural ) ) {

			return 'Error.';
		}

		global $zbs;

		?><div id="zbs-edit-master-wrap"><form method="post" id="zbs-edit-form" enctype="multipart/form-data"><input type="hidden" name="zbs-edit-form-master" value="<?php echo esc_attr( $this->objType ); ?>" />
		<style>

		</style>
		<?php
		// left in for later :)
				$currentFields = array();
		$allFields             = array();
		?>
			<!-- field editor -->
			<div id="zbs-edit-field-editor" class="ui segment secondary">
			<?php if ( current_user_can( 'administrator' ) ) { ?>

				<h4 class="ui horizontal divider header">
					<i class="list layout icon"></i>
					<?php echo esc_html( $this->singular ) . ' ' . esc_html__( 'Field Manager', 'zero-bs-crm' ); ?>
				</h4>

				<div id="zbs-edit-field-wrap" class="ui divided grid">

					<div class="ui active inverted dimmer hidden" id="zbs-field-manager-loading" style="display:none">
					<div class="ui text loader"><?php esc_html_e( 'Loading', 'zero-bs-crm' ); ?></div>
					</div>

					<div class="row">
						<div class="twelve wide column">

							<h4><?php esc_html_e( 'Current Fields', 'zero-bs-crm' ); ?></h4>


							<div id="zbs-column-manager-current-fields" class="ui segment zbs-column-manager-connected"> 
								<?php
								if ( is_array( $currentFields ) ) {
									foreach ( $currentFields as $colKey => $col ) {

										?>
									<div id="zbs-column-manager-field-<?php echo esc_attr( $colKey ); ?>" class="ui basic button zbs-column-manager-field" data-key="<?php echo esc_attr( $colKey ); ?>"><?php esc_html_e( $col[0], 'zero-bs-crm' ); ?></div>
										<?php

									}
								}
								?>
							</div>

						</div>
						<div class="four wide column">

							<h4><?php esc_html_e( 'Available Fields', 'zero-bs-crm' ); ?></h4>

							<div id="zbs-column-manager-available-fields" class="ui segment zbs-column-manager-connected"> 
								<?php
								if ( is_array( $allFields ) ) {
									foreach ( $allFields as $colKey => $col ) {

										if ( ! array_key_exists( $colKey, $currentFields ) ) { // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase

											?>
										<div id="zbs-column-manager-field-<?php echo esc_attr( $colKey ); ?>" class="ui basic button zbs-column-manager-field" data-key="<?php echo esc_attr( $colKey ); ?>"><?php esc_html_e( $col[0], 'zero-bs-crm' ); ?></div>
											<?php

										}
									}
								}
								?>
							</div>

						</div>
					</div>
				</div>



			<?php } // / can admin ?>

			</div>
			<!-- field manager -->

			<div id="zbs-edit-warnings-wrap">
				<?php
				#} Pre-loaded msgs, because I wrote the helpers in php first... should move helpers to js and fly these

				echo zeroBSCRM_UI2_messageHTML( 'warning hidden', 'Error Retrieving ' . $this->plural, 'There has been a problem retrieving your ' . $this->singular . ', if this issue persists, please contact support.', 'disabled warning sign', 'zbsCantLoadData' );

				?>
			</div>
			<!-- main view: list + sidebar -->
			<div id="zbs-edit-wrap" class="ui divided grid">

				<?php

				if ( count( $zbs->pageMessages ) > 0 ) {

					#} Updated Msgs
					// was doing like this, but need control over styling
					// do_action( 'zerobs_updatemsg_contact');
					// so for now just using global :)
					echo '<div class="row" style="padding-bottom: 0 !important;"><div class="sixteen wide column" id="zbs-edit-notification-wrap">';

					foreach ( $zbs->pageMessages as $msg ) {

						// for now these can be any html :)
						echo $msg;

					}

						echo '</div></div>';

				}

				?>

				<div class="row">


					<!-- record list -->
					<div class="twelve wide column" id="zbs-edit-table-wrap">

						<?php
							#} Main Metaboxes
							zeroBSCRM_do_meta_boxes( 'zerobs_edit_tags', 'normal', $this->objType );
						?>

					</div>
					<!-- side bar -->
					<div class="four wide column" id="zbs-edit-sidebar-wrap">
						<?php

							#} Sidebar metaboxes
							zeroBSCRM_do_meta_boxes( 'zerobs_edit_tags', 'side', $this->objType );

						?>

						<?php ##WLREMOVE ?>
						<?php echo $this->extraBoxes; ?>
						<?php ##/WLREMOVE ?>
					</div>
				</div>

				<!-- could use this for mobile variant?) 
				<div class="two column mobile only row" style="display:none"></div>
				-->
			</div> <!-- / mainlistview wrap -->
		</form></div>

		<script type="text/javascript">
		<?php

		// make simpler
		$tags = $zbs->DAL->getTagsForObjType(
			array(

				'objtypeid'    => $zbs->DAL->objTypeID( $this->objType ), // ZBS_TYPE_CONTACT in place of 'contact'=>1, 'transaction'=> etc.
				'excludeEmpty' => false,
				'withCount'    => false,
				'ignoreowner'  => true,

			)
		);
		$tagsArr = array(); if ( is_array( $tags ) && count( $tags ) > 0 ) {
			foreach ( $tags as $t ) {
				$tagsArr[] = $t['name'];
			}
		}
		$tags = $tagsArr;

		$jpcrm_edit_view_lang_labels = array_merge(
			array( 'today' => __( 'Today', 'zero-bs-crm' ) ),
			is_array( $this->langLabels ) ? $this->langLabels : array(),
		);
		?>

			// this forces firing of our custom init in admin.tags.metabox.js
			var zbsCustomTagInitFunc = 'zbsJS_bindTagManagerInit';
			var zbsDontDrawTags = true; // don't draw em in edit box
			// and this OVERRIDES the tag metabox list:
			var zbsCRMJS_currentTags = <?php echo wp_json_encode( $tags, JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP ); ?>;

			jQuery(function($){
				console.log("======= TAG MANAGER VIEW UI =========");


			});

			// General options for listview
			var zbsEditSettings = {

				objdbname: <?php echo wp_json_encode( $this->objType, JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP ); ?>

			};
			var zbsDrawEditViewBlocker = false;
			var zbsDrawEditAJAXBlocker = false;
			var zbsObjectViewLinkPrefixCustomer = <?php echo wp_json_encode( jpcrm_esc_link( 'view', -1, 'zerobs_customer', true ), JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP ); ?>;
			var zbsObjectEditLinkPrefixCustomer = <?php echo wp_json_encode( jpcrm_esc_link( 'edit', -1, 'zerobs_customer', true ), JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP ); ?>;
			var zbsObjectViewLinkPrefixCompany = <?php echo wp_json_encode( jpcrm_esc_link( 'view', -1, 'zerobs_company', true ), JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP ); ?>;
			var zbsListViewLink = <?php echo wp_json_encode( jpcrm_esc_link( $this->listViewSlug ), JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP ); ?>;
			var zbsClick2CallType = <?php echo (int) zeroBSCRM_getSetting( 'clicktocalltype' ); ?>;
			var zbsEditViewLangLabels = <?php echo wp_json_encode( $jpcrm_edit_view_lang_labels, JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP ); ?>;

			var zbscrmjs_secToken = <?php echo wp_json_encode( wp_create_nonce( 'zbscrmjs-ajax-nonce' ), JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP ); ?>;
		</script>
		<?php
	} // /draw func
} // class
