<?php // phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase
/**
 * Jetpack CRM
 * https://jetpackcrm.com
 *
 * @package automattic/jetpack-crm
 */

if ( ! defined( 'ZEROBSCRM_PATH' ) ) {
	exit( 0 );
}

/**
 * Render Tasks calendar page.
 */
function zeroBSCRM_render_tasks_calendar_page() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid

	global $zbs;

	$current_task_user_id = false;
	if ( ! empty( $_GET['zbsowner'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		$current_task_user_id = (int) $_GET['zbsowner']; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
	} elseif ( zeroBSCRM_getSetting( 'taskownership' ) === 1 ) {
		$current_task_user_id = get_current_user_id();
	}
	?>

	<div>
		<div class="ui segment main-task-view">
			<?php
			// retrieve via DAL, just getting them ALL (pretty gross, but for now, at least more performant.)
			$args = array(
				'sortByField' => 'ID',
				'sortOrder'   => 'DESC',
				'page'        => 0,
				'perPage'     => 50000,
			);

			// belonging to specific user
			if ( $current_task_user_id ) {
				$args['ownedBy'] = $current_task_user_id;
			}

			$calendar_events = array();

			$tasks = $zbs->DAL->events->getEvents( $args ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase

			// for now we cycle through and form into same object as MS wrote this for,
			// v3.0 + to rewrite display engine to use proper DAL objs on fly.
			if ( is_array( $tasks ) && count( $tasks ) > 0 ) {

				$avatar_args = array(
					'size' => 24,
				);
				foreach ( $tasks as $task ) {

					if (
						isset( $task['start'] ) && $task['start'] > 0
						&& isset( $task['end'] ) && $task['end'] > 0
					) {

						$new_task = array( // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
							'title'     => zeroBSCRM_textExpose( $task['title'] ),
							'start'     => jpcrm_uts_to_datetime_str( $task['start'], 'Y-m-d H:i:s' ),
							'end'       => jpcrm_uts_to_datetime_str( $task['end'], 'Y-m-d H:i:s' ),
							'url'       => jpcrm_esc_link( 'edit', $task['id'], ZBS_TYPE_TASK ),
							'owner'     => $task['owner'],
							'avatar'    => '', // default
							'showonCal' => 'hide', // default
							'complete'  => '-1',
						);

						// avatar?
						if ( isset( $task['owner'] ) && $task['owner'] > 0 ) {
							$new_task['avatar'] = get_avatar_url( $task['owner'], $avatar_args );
						}

						// show on cal
						if ( isset( $task['show_on_cal'] ) && $task['show_on_cal'] === 1 ) {
							$new_task['showonCal'] = 'show';
						}

						// complete?
						if ( isset( $task['complete'] ) && $task['complete'] === 1 ) {
							$new_task['complete'] = 1;
						}

						// add it
						$calendar_events[] = $new_task;
					}
				}
			}

			$potential_locales = array(
				strtolower( zeroBSCRM_getLocale() ), // e.g. en-gb
				zeroBSCRM_getLocale( false ), // e.g. en
			);

			$fullcalendar_locale = false;
			foreach ( $potential_locales as $locale ) {
				$potential_file = 'build/lib/fullcalendar/locales/' . $locale . '.global.min.js';
				if ( file_exists( ZEROBSCRM_PATH . $potential_file ) ) {
					$fullcalendar_locale = $locale;
					wp_enqueue_script( 'jpcrm-fullcalendar-locale', ZEROBSCRM_URL . $potential_file, array( 'jpcrm-fullcalendar' ), $zbs::VERSION, true );
					break;
				}
			}

			$jpcrm_fullcalendar_data = 'jpcrm_fullcalendar_data = ' . wp_json_encode(
				array(
					'locale'   => $fullcalendar_locale,
					'events'   => $calendar_events,
					'firstDay' => (int) get_option( 'start_of_week', 0 ),
				),
				JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP
			);
			?>

			<div id='calendar'></div>
			<br class="clear">
		</div>
	</div>
	<?php
	wp_add_inline_script( 'jpcrm-tasks', $jpcrm_fullcalendar_data, 'before' );
}
