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

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

/*
======================================================
	Create External Source Metabox
	====================================================== */
class zeroBS__Metabox_ExtSource extends zeroBS__Metabox {

	private $acceptableTypes = array( 'contact', 'company', 'transaction', 'invoice' );

	/**
	 * The object type ID using this metabox.
	 *
	 * @since 6.2.0
	 * @var int
	 */
	private $objTypeID; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.PropertyNotSnakeCase

	public function __construct( $plugin_file, $objType = 'contact', $metaboxScreen = 'zbs-add-edit-contact-edit' ) {

		global $zbs;

		// set these
		// DAL3 switched for objType $this->postType = 'zerobs_customer';
		$this->objType       = 'contact';
		$this->objTypeID     = ZBS_TYPE_CONTACT;
		$this->metaboxID     = 'zerobs-externalsource';
		$this->metaboxTitle  = __( 'External Source', 'zero-bs-crm' );
		$this->metaboxScreen = 'zbs-add-edit-contact-edit'; // DEFAULT (overriden by metaboxScreens below)
		// Better than this, is initiating multiple of this class with diff screens/objtypes
		// ... because that presevers obj type unlike this solution: $this->metaboxScreens = array('zbs-add-edit-contact-edit','zbs-add-edit-company-edit'); // (since v3.0 we can add multiple, overrides metaboxScreen)
		$this->metaboxArea     = 'side';
		$this->metaboxLocation = 'low';
		$this->saveOrder       = 1;
		$this->capabilities    = array(

			'can_hide'        => false, // can be hidden
			'areas'           => array( 'side' ), // areas can be dragged to - normal side = only areas currently
			'can_accept_tabs' => true,  // can/can't accept tabs onto it
			'can_become_tab'  => false, // can be added as tab
			'can_minimise'    => true, // can be minimised
			'can_move'        => true, // can be moved

		);

		// Catch any passed params as overrides
		// (this allows us to have multiple initialised (e.g. one for contacts, one co's))
		if ( isset( $objType ) ) {
			$this->objType = $objType;
		}
		if ( isset( $objType ) ) {
			$this->objTypeID = $zbs->DAL->objTypeID( $this->objType );
		}
		if ( isset( $metaboxScreen ) ) {
			$this->metaboxScreen = $metaboxScreen;
		}

		// set typeint based on type
		$this->typeInt = $zbs->DAL->objTypeID( $this->objType ); // contact -> ZBS_TYPE_CONTACT = 1

		#} Only load if is legit.

			// also hide if "new" (not edit) - as defies point of extsource
			$isEdit = false;
		if ( isset( $_GET['action'] ) && $_GET['action'] == 'edit' && isset( $_GET['zbsid'] ) && ! empty( $_GET['zbsid'] ) ) {
			$isEdit = true;
		}

		if ( in_array( $this->objType, $this->acceptableTypes ) && $isEdit ) {
			// call this
			$this->initMetabox();
		}
	}

	public function html( $obj, $metabox ) {

		global $zbs;

		// Only load if is legit.
		if ( in_array( $this->objType, $this->acceptableTypes ) ) {

			$object_id = -1; if ( is_array( $obj ) && isset( $obj['id'] ) ) {
				$object_id = (int) $obj['id'];
			}

			// use centralised function to draw
			jpcrm_render_external_sources_by_id( $object_id, $this->objTypeID );

		} // / only load if post type
	}
}

/**
 * End of Create External Source Metabox
 */
