<?php
/*
!
 * Jetpack CRM
 * https://jetpackcrm.com
 * V2.5
 *
 * Copyright 2020 Automattic
 *
 * Date: 09/01/18
 */

/*
======================================================
	Breaking Checks ( stops direct access )
	====================================================== */
if ( ! defined( 'ZEROBSCRM_PATH' ) ) {
	exit( 0 );
}
/*
======================================================
	/ Breaking Checks
	====================================================== */

/*
======================================================
		Page Controllers
	====================================================== */

/*
* Sets $zbs-pageKey based on $_GET parameters
* e.g. `admin.php?page=zbs-add-edit&action=edit&zbstype=contact&zbsid=101`
* sets `$zbs->pageKey` to `zbs-add-edit-contact-edit`
*/
function jpcrm_pages_admin_addedit_set_pagekey() {

	global $zbs;

	// defaults

	// retrieve vars
	$zbsid = $zbs->zbsvar( 'zbsid' );
	$type  = $zbs->zbsvar( 'zbstype' );
	if ( $type == -1 ) {
		$type = 'contact';
	}
	$action = $zbs->zbsvar( 'action' );

	// note here we append type + action to pageKey, if they're here (so we can differentiate between them for screenoptions)
	// This overrides the setting of pageKey in CoreMenusLearn
	$pageKey      = $zbs->slugs['addedit']; // makes it zbs-add-edit
	$pageKey     .= '-' . $type . '-' . $action;
	$zbs->pageKey = $pageKey;
}

/*
*   Translates $_GET variables into zeroBSCRM_pages_admin_addedit_page call
*/
function zeroBSCRM_pages_admin_addedit() {

	global $zbs;

	zeroBSCRM_pages_admin_addedit_page( ( $zbs->zbsvar( 'zbstype' ) == -1 ) ? 'contact' : $zbs->zbsvar( 'zbstype' ), $zbs->zbsvar( 'action' ), $zbs->zbsvar( 'zbsid' ) );
}

// } This is a slow general move to new UI (and new DB) and moving away from the custom post add / edit links
function zeroBSCRM_pages_admin_addedit_page( $type = 'contact', $action = 'new', $id = -1 ) {

	global $zbs;
	$obj_type_id = $zbs->DAL->objTypeID( $type ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase

	switch ( $obj_type_id ) {

		case ZBS_TYPE_CONTACT:
			// pass them this way..
			zeroBSCRM_pages_admin_addedit_page_contact( $id, $action );
			break;

		case ZBS_TYPE_COMPANY:
			zeroBSCRM_pages_admin_addedit_page_company( $id, $action );
			break;

		case ZBS_TYPE_SEGMENT:
			zeroBSCRM_pages_admin_addedit_page_segment( $id, $action );
			break;

		// DAL3.0 + the rest can be fired via zeroBSCRM_pages_admin_addedit_page_generic
		case ZBS_TYPE_QUOTE:
		case ZBS_TYPE_INVOICE:
		case ZBS_TYPE_TRANSACTION:
		case ZBS_TYPE_TASK:
		case ZBS_TYPE_FORM:
		case ZBS_TYPE_QUOTETEMPLATE:
			if ( zeroBSCRM_permsObjType( $obj_type_id ) ) {
				zeroBSCRM_pages_admin_addedit_page_generic( $id, $action );
			} else {
				echo '<div style="margin-left: 20px">';
				echo esc_html( sprintf( __( 'You do not have permission to edit this %s.', 'zero-bs-crm' ), $zbs->DAL->typeStr( $obj_type_id ) ) ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase,WordPress.WP.I18n.MissingTranslatorsComment
				echo '</div>';
			}
			break;

	}
}

// } This function runs before any HTML has been output (after admin_init)
// } ... it catches add_edit pages + initiates the right edit class, if needed
// } ... This allows us to SAVE DATA before HTML has been output + therefor redirect with http headers
// } e.g. New contact -> added -> redir to /..&zbsid=1
// } Edit view is added to a global var, so draw can be called in page func :)
function zeroBSCRM_prehtml_pages_admin_addedit() {

	global $zbs;

	// get from zbsvar - so long as pre admin_init, this is fine to do. (This func is called a few funcs after globalise_vars() in Core, so is legit)
	$zbsid  = $zbs->zbsvar( 'zbsid' );
	$action = $zbs->zbsvar( 'action' );
	$type   = $zbs->zbsvar( 'zbstype' );
	if ( empty( $type ) || $type == -1 ) {
		$type = 'contact';
	}

	// set the pageKey var
	jpcrm_pages_admin_addedit_set_pagekey();

	// proceed to class factory
	if ( $action == 'edit' ) {

		global $zbsEditView;

		switch ( $type ) {

			case 'contact':
				// } sell smt?
				$upsellBoxHTML = '';

				$zbsEditView = new zeroBSCRM_Edit(
					array(

						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_CONTACT,

						/*
						all of this was centralised via objTypeID^^ based on DAL from DAL3+
						'objType'       => 'contact',
						'singular'      => $lang[0], // Contact
						'plural'        => $lang[1], // Contacts
						'tag'           => 'zerobscrm_customertag',
						'postType'      => 'zerobs_customer',
						'postPage'      => 'manage-customers', */

						'langLabels' => array(

							// labels
							// 'what' => __('WHAT',"zero-bs-crm"),

						),
						'extraBoxes' => $upsellBoxHTML,

					)
				);

				break;

			case 'company':
				$upsellBoxHTML = '';
				$zbsEditView   = new zeroBSCRM_Edit(
					array(
						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_COMPANY,
						'langLabels' => array(),
						'extraBoxes' => $upsellBoxHTML,
					)
				);

				break;

			case 'quote':
				$upsellBoxHTML = '';
				$zbsEditView   = new zeroBSCRM_Edit(
					array(
						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_QUOTE,
						'langLabels' => array(
							// send email modal
							'send_email'          => __( 'Email Quote', 'zero-bs-crm' ),
							'sendthisemail'       => __( 'Send this quote via email:', 'zero-bs-crm' ),
							'toemail'             => __( 'To Email:', 'zero-bs-crm' ),
							'toemailplaceholder'  => __( 'e.g. mike@example.com', 'zero-bs-crm' ),
							'attachassoc'         => __( 'Attach associated files', 'zero-bs-crm' ),
							'attachpdf'           => __( 'Attach as PDF', 'zero-bs-crm' ),
							'sendthemail'         => __( 'Send', 'zero-bs-crm' ),
							'sendneedsassignment' => __( 'To send an email, this quote needs to be assigned to a contact or company with a valid email address', 'zero-bs-crm' ),
							'sendingemail'        => __( 'Sending Email...', 'zero-bs-crm' ),
							'senttitle'           => __( 'Quote Sent', 'zero-bs-crm' ),
							'sent'                => __( 'Your quote has been sent by Email', 'zero-bs-crm' ),
							'senderrortitle'      => __( 'Error Sending', 'zero-bs-crm' ),
							'senderror'           => __( 'There was an error sending this quote via email.', 'zero-bs-crm' ),
						),
						'extraBoxes' => $upsellBoxHTML,
					)
				);

				break;

			case 'invoice':
				$upsellBoxHTML = '';
				$zbsEditView   = new zeroBSCRM_Edit(
					array(
						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_INVOICE,
						'langLabels' => array(),
						'extraBoxes' => $upsellBoxHTML,
					)
				);

				break;

			case 'transaction':
				$upsellBoxHTML = '';
				$zbsEditView   = new zeroBSCRM_Edit(
					array(
						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_TRANSACTION,
						'langLabels' => array(),
						'extraBoxes' => $upsellBoxHTML,
					)
				);

				break;

			case 'form':
				$upsellBoxHTML = '';
				$zbsEditView   = new zeroBSCRM_Edit(
					array(
						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_FORM,
						'langLabels' => array(),
						'extraBoxes' => $upsellBoxHTML,
					)
				);

				break;

			case 'event':
				$upsellBoxHTML = '';
				$zbsEditView   = new zeroBSCRM_Edit(
					array(
						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_TASK,
						'langLabels' => array(),
						'extraBoxes' => $upsellBoxHTML,
					)
				);

				break;

			case 'quotetemplate':
				$upsellBoxHTML = '';
				$zbsEditView   = new zeroBSCRM_Edit(
					array(
						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_QUOTETEMPLATE,
						'langLabels' => array(),
						'extraBoxes' => $upsellBoxHTML,
					)
				);

				break;

		}
	} elseif ( $action == 'delete' ) {

		global $zbsDeleteView;

		switch ( $type ) {

			case 'contact':
				$zbsDeleteView = new zeroBSCRM_Delete(
					array(

						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_CONTACT,
						'langLabels' => array(),

					)
				);

				break;

			case 'company':
				$zbsDeleteView = new zeroBSCRM_Delete(
					array(
						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_COMPANY,
						'langLabels' => array(),
					)
				);

				break;

			case 'quote':
				$zbsDeleteView = new zeroBSCRM_Delete(
					array(
						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_QUOTE,
						'langLabels' => array(),
					)
				);

				break;

			case 'invoice':
				$zbsDeleteView = new zeroBSCRM_Delete(
					array(
						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_INVOICE,
						'langLabels' => array(),
					)
				);

				break;

			case 'transaction':
				$zbsDeleteView = new zeroBSCRM_Delete(
					array(
						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_TRANSACTION,
						'langLabels' => array(),
					)
				);

				break;

			case 'form':
				$zbsDeleteView = new zeroBSCRM_Delete(
					array(
						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_FORM,
						'langLabels' => array(),
					)
				);

				break;

			case 'event':
				$zbsDeleteView = new zeroBSCRM_Delete(
					array(
						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_TASK,
						'langLabels' => array(),
					)
				);

				break;

			case 'quotetemplate':
				$zbsDeleteView = new zeroBSCRM_Delete(
					array(
						'objID'      => $zbsid,
						'objTypeID'  => ZBS_TYPE_QUOTETEMPLATE,
						'langLabels' => array(),
					)
				);

				break;

		}
	}
}

function zeroBSCRM_pages_admin_addedit_page_contact( $id = -1, $action = 'new' ) {

	global $zbs;

	if ( $action == 'view' ) {

		// return view page
		zeroBSCRM_pages_admin_view_page_contact( $id );

	} elseif ( $action == 'edit' ) {

		/*
		================================================================================
		=============================== EDIT OBJECT ==================================== */

			global $zbs,$zbsEditView;

			/*
			Edit Class now initiated above (in zeroBSCRM_prehtml_pages_admin_addedit) for pre-html saving
			.. so we can just draw here :) */
			$zbsEditView->drawEditView();

		/*
		============================== / EDIT OBJECT ====================================
		================================================================================ */

	} elseif ( $action == 'delete' ) {

		/*
		================================================================================
		================================ DEL OBJECT ==================================== */

			global $zbsDeleteView;

			/*
			Delete Class now initiated above (in zeroBSCRM_prehtml_pages_admin_addedit) for pre-html saving
			.. so we can just draw here :) */
			$zbsDeleteView->drawView();

		/*
		============================== /  DEL OBJECT ====================================
		================================================================================ */

	}
}

function zeroBSCRM_pages_admin_addedit_page_company( $id = -1, $action = 'new' ) {

	global $zbs;

	if ( $action == 'view' ) {

		// return view page
		zeroBSCRM_pages_admin_view_page_company( $id );

	} elseif ( $action == 'edit' ) {

		// super simple draw, as class would have been initiated into global, here: zeroBSCRM_prehtml_pages_admin_addedit
		global $zbsEditView;
		$zbsEditView->drawEditView();

	} elseif ( $action == 'delete' ) {

		/*
		================================================================================
		================================ DEL OBJECT ==================================== */

			global $zbsDeleteView;

			/*
			Delete Class now initiated above (in zeroBSCRM_prehtml_pages_admin_addedit) for pre-html saving
			.. so we can just draw here :) */
			$zbsDeleteView->drawView();

		/*
		============================== /  DEL OBJECT ====================================
		================================================================================ */

	}
}

function zeroBSCRM_pages_admin_addedit_page_segment( $id, $action = '' ) {

	if ( $action == 'view' ) {

		// return view page
		// for now, none
		// zeroBSCRM_pages_addEditSegment($id);

	} elseif ( $action == 'edit' ) {

		// edit page
		zeroBSCRM_pages_addEditSegment( $id );

	} elseif ( $action == 'delete' ) {

		/*
		================================================================================
		================================ DEL OBJECT ==================================== */

			global $zbsDeleteView;

			/*
			Delete Class now initiated above (in zeroBSCRM_prehtml_pages_admin_addedit) for pre-html saving
			.. so we can just draw here :) */
			$zbsDeleteView->drawView();

		/*
		============================== /  DEL OBJECT ====================================
		================================================================================ */

	}
}

function zeroBSCRM_pages_admin_addedit_page_generic( $id = -1, $action = 'new' ) {

	global $zbs;

	if ( $action == 'view' ) {

		// return view page
		// Generic objs (quotes, invs, trans etc.)
		echo zeroBSCRM_UI2_messageHTML( 'warning', __( 'Error #101', 'zero-bs-crm' ), __( 'This page does not exist.', 'zero-bs-crm' ) );

	} elseif ( $action == 'edit' ) {

		// super simple draw, as class would have been initiated into global, here: zeroBSCRM_prehtml_pages_admin_addedit
		global $zbsEditView;
		$zbsEditView->drawEditView();

	} elseif ( $action == 'delete' ) {

		/*
		================================================================================
		================================ DEL OBJECT ==================================== */

			global $zbsDeleteView;

			/*
			Delete Class now initiated above (in zeroBSCRM_prehtml_pages_admin_addedit) for pre-html saving
			.. so we can just draw here :) */
			$zbsDeleteView->drawView();

		/*
		============================== /  DEL OBJECT ====================================
		================================================================================ */

	}
}
/*
======================================================
		/ Page Controllers
	====================================================== */

/*
======================================================
	Page Titles (for our custom pages e.g. edit contact)
	====================================================== */
add_filter( 'admin_title', 'zeroBSCRM_pages_titleModifier', 999, 2 );

function zeroBSCRM_pages_titleModifier( $admin_title, $title ) {
	return apply_filters( 'zbs_admin_title_modifier', $admin_title, $title );
}
/*
this is hooked into in page setup


add_filter( 'zbs_admin_title_modifier' , 'cut_the_boasting',10,2);
function cut_the_boasting($admin_title,$title) {
	return 'ZBS'.$title.' AND '.$admin_title;
}

*/
/*
======================================================
	/ Page Titles (for our custom pages e.g. edit contact)
	====================================================== */