<?php
/*
 * Jetpack CRM
 * https://jetpackcrm.com
 * V3.0
 *
 * Copyright 2020 Automattic
 *
 * Date: 20/02/2019
 */

/*
======================================================
	Breaking Checks ( stops direct access )
======================================================
*/

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

/*
======================================================
	/ Breaking Checks
======================================================
*/

class zeroBS__Metabox_Ownership extends zeroBS__Metabox {

	public $saveAutomatically = false; // if this is true, this'll automatically update the object owner- this is off by default as most objects save owners themselves as part of addUpdateWhatever so that IA hooks fire correctly

	public function __construct( $plugin_file, $typeInt = ZBS_TYPE_CONTACT ) {

		global $zbs;

		// set these via init (defaults)
		$this->typeInt = $typeInt;

		// these then use objtypeint to generate:
		$typeStr             = $zbs->DAL->objTypeKey( $typeInt );
		$this->objType       = $typeStr;
		$this->metaboxID     = 'zerobs-' . $typeStr . '-owner'; // zerobs-contact-owner
		$this->metaboxScreen = 'zbs-add-edit-' . $typeStr . '-edit'; // 'zbs-add-edit-contact-edit'

		$this->metaboxArea     = 'side';
		$this->metaboxLocation = 'low';
		$this->metaboxTitle    = __( 'Assigned To', 'zero-bs-crm' );

		// call this
		$this->initMetabox();
	}

	public function html( $obj, $metabox ) {

		global $zbs;

		// localise ID
		if ( is_array( $obj ) && isset( $obj['id'] ) ) {
			$objID        = (int) $obj['id'];
			$zbsThisOwner = zeroBS_getOwnerObj( $obj['owner'] );
		} else {
			$objID        = -1;
			$zbsThisOwner = array();
		}

		// can even change owner?
		$canGiveOwnership = $zbs->settings->get( 'usercangiveownership' );
		$canChangeOwner   = ( $canGiveOwnership == '1' || current_user_can( 'administrator' ) );

		// init
		$zbsPossibleOwners = array();

		switch ( $this->typeInt ) {

			case ZBS_TYPE_CONTACT:
				// If allowed to change assignment, load other possible users
				if ( $canChangeOwner ) {
					$zbsPossibleOwners = zeroBS_getPossibleCustomerOwners();
				}
				break;

			case ZBS_TYPE_COMPANY:
				// If allowed to change assignment, load other possible users
				if ( $canChangeOwner ) {
					$zbsPossibleOwners = zeroBS_getPossibleCompanyOwners();
				}
				break;

			default:
				$zbsThisOwner = array();
				break;

		}

		// Can change owner, or has owner details, then show... (this whole box will be hidden if setting says no ownerships)
		if ( $canChangeOwner || isset( $zbsThisOwner['ID'] ) ) {

			// Either: "assigned to DAVE" or "assigned to DAVE (in drop down list)"
			if ( ! $canChangeOwner ) {

				// simple unchangable
				?>
				<div style="text-align:center">
					<?php echo esc_html( $zbsThisOwner['OBJ']->display_name ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase ?>
				</div>
				<?php

			} else {

				// DDL
				?>
				<div style="text-align:center">
					<select class="" id="zerobscrm-owner" name="zerobscrm-owner">
						<option value="-1"><?php esc_html_e( 'None', 'zero-bs-crm' ); ?></option>
						<?php
						if ( is_array( $zbsPossibleOwners ) && count( $zbsPossibleOwners ) > 0 ) {
							foreach ( $zbsPossibleOwners as $possOwner ) {
								$is_selected = isset( $zbsThisOwner['ID'] ) && $possOwner->ID == $zbsThisOwner['ID'];
								echo '<option value="' . esc_attr( $possOwner->ID ) . '"' . ( $is_selected ? ' selected="selected"' : '' ) . '>' . esc_html( $possOwner->display_name ) . '</option>';
							}
						}
						?>
					</select>
				</div>
				<?php

			}
		}
	}

	public function save_data( $objID, $obj ) {

		// Note: Most objects save owners as part of their own addUpdate routines.
		// so this now only fires where saveAutomatically = true
		if ( $this->saveAutomatically ) {

			$newOwner = -1;
			if ( isset( $_POST['zerobscrm-owner'] ) && ! empty( $_POST['zerobscrm-owner'] ) ) {
				$newOwner = (int) sanitize_text_field( $_POST['zerobscrm-owner'] );
			}

			// If newly created and no new owner specified, use self:
			if ( isset( $_POST['zbscrm_newcustomer'] ) && $newOwner === -1 ) {
				$newOwner = get_current_user_id();
			}

			// Save
			if ( $objID > 0 && $this->typeInt > 0 ) {
				$zbs->DAL->setObjectOwner(
					array(
						'objID'     => $objID,
						'objTypeID' => $this->typeInt,
						'ownerID'   => $newOwner,
					)
				);
			}
		}

		return $obj;
	}
}
