<?php

	class UniteEmRev{
		
		const DEFAULT_FILTER = "none";
		
		/**
		 * 
		 * check if events class exists
		 */
		public static function isEventsExists(){
			if(defined("EM_VERSION") && defined("EM_PRO_MIN_VERSION"))
				return(true);
				
			return(false);
		}
		
		
		/**
		 * 
		 * get sort by list
		 */
		public static function getArrFilterTypes(){
			
				$arrEventsSort = array("none" => __("All Events",REVSLIDER_TEXTDOMAIN),
									   "today" => __("Today",REVSLIDER_TEXTDOMAIN),
									   "tomorrow"=>__("Tomorrow",REVSLIDER_TEXTDOMAIN),
									   "future"=>__("Future",REVSLIDER_TEXTDOMAIN),
									   "past"=>__("Past",REVSLIDER_TEXTDOMAIN),
									   "month"=>__("This Month",REVSLIDER_TEXTDOMAIN),
									   "nextmonth"=>__("Next Month",REVSLIDER_TEXTDOMAIN)
				);
				
			return($arrEventsSort);
		}
		
		
		/**
		 * 
		 * get meta query
		 */
		public static function getWPQuery($filterType, $sortBy){
			
			
			$dayMs = 60*60*24;
			
			$time = current_time('timestamp');
			$todayStart = strtotime(date('Y-m-d', $time));
			$todayEnd = $todayStart + $dayMs-1;
			$tomorrowStart = $todayEnd+1;
			$tomorrowEnd = $tomorrowStart + $dayMs-1;
			
			//dmp(UniteFunctionsRev::timestamp2DateTime($tomorrowStart));exit();
			
			$start_month = strtotime(date('Y-m-1',$time));
			$end_month = strtotime(date('Y-m-t',$time)) + 86399;
			$next_month_middle = strtotime('+1 month', $time); //get the end of this month + 1 day
			$start_next_month = strtotime(date('Y-m-1',$next_month_middle));
			$end_next_month = strtotime(date('Y-m-t',$next_month_middle)) + 86399;
			
			$query = array();
			
			switch($filterType){
				case self::DEFAULT_FILTER:	//none
				break;
				case "today":
					$query[] = array( 'key' => '_start_ts', 'value' => $todayEnd, 'compare' => '<=' );
					$query[] = array( 'key' => '_end_ts', 'value' => $todayStart, 'compare' => '>=' );
				break;
				case "future":
					$query[] = array( 'key' => '_start_ts', 'value' => $time, 'compare' => '>' );
				break;
				case "tomorrow":
					$query[] = array( 'key' => '_start_ts', 'value' => $tomorrowEnd, 'compare' => '<=' );
					$query[] = array( 'key' => '_end_ts', 'value' => $todayStart, 'compare' => '>=' );	
				break;
				case "past":
					$query[] = array( 'key' => '_end_ts', 'value' => $todayStart, 'compare' => '<' );
				break;
				case "month":
					$query[] = array( 'key' => '_start_ts', 'value' => $end_month, 'compare' => '<=' );
					$query[] = array( 'key' => '_end_ts', 'value' => $start_month, 'compare' => '>=' );					
				break;
				case "nextmonth":
					$query[] = array( 'key' => '_start_ts', 'value' => $end_next_month, 'compare' => '<=' );
					$query[] = array( 'key' => '_end_ts', 'value' => $start_next_month, 'compare' => '>=' );
				break;
				default:
					UniteFunctionsRev::throwError("Wrong event filter");
				break;
			} 
			
			if(!empty($query))
				$response["meta_query"] = $query;
			
			//convert sortby
			switch($sortBy){
				case "event_start_date":
					$response["orderby"] = "meta_value_num";
					$response["meta_key"] = "_start_ts";
				break;
				case "event_end_date":
					$response["orderby"] = "meta_value_num";
					$response["meta_key"] = "_end_ts";
				break;
			}			
			
			return($response);
		}
		
		/**
		 * 
		 * get event post data in array. 
		 * if the post is not event, return empty array
		 */
		public static function getEventPostData($postID){
			if(self::isEventsExists() == false)
				return(array());
							
			$postType = get_post_type($postID);
			if($postType != EM_POST_TYPE_EVENT)
				return(array());
			
			$event = new EM_Event($postID, 'post_id');
			$location = $event->get_location();
			
			$arrEvent = $event->to_array();
			$arrLocation = $location->to_array();
			
			$date_format = get_option('date_format');
			$time_format = get_option('time_format');
			
			$arrEvent["event_start_date"] = date_format(date_create_from_format('Y-m-d', $arrEvent["event_start_date"]), $date_format);
			$arrEvent["event_end_date"] = date_format(date_create_from_format('Y-m-d', $arrEvent["event_end_date"]), $date_format);
			$arrEvent["event_start_time"] = date_format(date_create_from_format('H:i:s', $arrEvent["event_start_time"]), $time_format);
			$arrEvent["event_end_time"] = date_format(date_create_from_format('H:i:s', $arrEvent["event_end_time"]), $time_format);
			
			$response = array();
			$response["start_date"] = $arrEvent["event_start_date"];
			$response["end_date"] = $arrEvent["event_end_date"];
			$response["start_time"] = $arrEvent["event_start_time"];
			$response["end_time"] = $arrEvent["event_end_time"];
			$response["id"] = $arrEvent["event_id"];
			$response["location_name"] = $arrLocation["location_name"];
			$response["location_address"] = $arrLocation["location_address"];
			$response["location_slug"] = $arrLocation["location_slug"];
			$response["location_town"] = $arrLocation["location_town"];
			$response["location_state"] = $arrLocation["location_state"];
			$response["location_postcode"] = $arrLocation["location_postcode"];
			$response["location_region"] = $arrLocation["location_region"];
			$response["location_country"] = $arrLocation["location_country"];
			$response["location_latitude"] = $arrLocation["location_latitude"];
			$response["location_longitude"] = $arrLocation["location_longitude"];
			
			return($response);
		}
		
		/**
		 * 
		 * get events sort by array
		 */
		public static function getArrSortBy(){
			$arrSortBy = array();
			$arrSortBy["event_start_date"] = __("Event Start Date",REVSLIDER_TEXTDOMAIN);
			$arrSortBy["event_end_date"] = __("Event End Date",REVSLIDER_TEXTDOMAIN);
			return($arrSortBy);			
		}
		
	}
?>