*/
class Water_The_Theme_Public {
	/**
	 * The ID of this plugin.
	 *
	 * @since    1.0.0
	 * @access   private
	 * @var      string    $plugin_name    The ID of this plugin.
	 */
	private $plugin_name;
	/**
	 * The version of this plugin.
	 *
	 * @since    1.0.0
	 * @access   private
	 * @var      string    $version    The current version of this plugin.
	 */
	private $version;
	/**
	 * Initialize the class and set its properties.
	 *
	 * @since    1.0.0
	 * @param      string    $plugin_name       The name of the plugin.
	 * @param      string    $version    The version of this plugin.
	 */
	public function __construct( $plugin_name, $version ) {
		$this->plugin_name = $plugin_name;
		$this->version = $version;
	}
	/**
	 * Register the stylesheets for the public-facing side of the site.
	 *
	 * @since    1.0.0
	 */
	public function enqueue_styles() {
		/**
		 * This function is provided for demonstration purposes only.
		 *
		 * An instance of this class should be passed to the run() function
		 * defined in Water_The_Theme_Loader as all of the hooks are defined
		 * in that particular class.
		 *
		 * The Water_The_Theme_Loader will then create the relationship
		 * between the defined hooks and the functions defined in this
		 * class.
		 */
		wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/water-the-theme-public.css', array(), $this->version, 'all' );
	}
	/**
	 * Register the JavaScript for the public-facing side of the site.
	 *
	 * @since    1.0.0
	 */
	public function enqueue_scripts() {
		/**
		 * This function is provided for demonstration purposes only.
		 *
		 * An instance of this class should be passed to the run() function
		 * defined in Water_The_Theme_Loader as all of the hooks are defined
		 * in that particular class.
		 *
		 * The Water_The_Theme_Loader will then create the relationship
		 * between the defined hooks and the functions defined in this
		 * class.
		 */
		wp_enqueue_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'js/water-the-theme-public.js', array( 'jquery' ), $this->version, false );
	}
	
	public function water_the_theme($thePage) {
		$doc = new DOMDocument();
		$doc->loadHTML($thePage);
		$xml_tree = simplexml_import_dom($doc);
		
		$short_code_name = (string)$xml_tree->body->div->attributes()->class;		
		$thePage ="
";				
		
		// front page	
		// [usgs_custom name="Timely Information" location='03071590,03071600,03071605' parameters='00010,00065,62614'] 	
		if ($short_code_name === 'timely-information') {
			foreach ($xml_tree->body->div->div as $div) {
			
				$value = (string)$div;
				$class = (string)$div->attributes()->class;		
				$datetime = (string)$div->attributes()->datetime;
				list($sitename, $parameter) = explode(' ', $class);
				$sitename = ucwords(preg_replace('/_/', ' ', $sitename));
				$parameter = ucwords(preg_replace('/_/', ' ', $parameter));
				if ($parameter === 'Lake Or Reservoir Water Surface Elevation Above Ngvd 1929') {
					$parameter = '(AMSL)';
				}
				if ($sitename === 'Cheat Lake Near Stewartstown Wv') {
					if ($parameter === '(AMSL)') {
						$sitename = 'Lake Level';
					} else { 
						$sitename = 'Lake';
					}				
				}
				if ($sitename === 'Cheat River At Lake Lynn Pa') {
					if ($parameter === 'Gage Height') {
						$sitename = 'Below Dam';
					} else {
						$sitename = 'At Dam';
					}				
				}
				if ($sitename === 'Cheat River At Davidson Pa') {
					$sitename = 'Below Dam';				
				}
				if ( $sitename !== 'Lake') {
				$thePage .= '';
				$thePage .= "| $sitename $parameter | $value | ";
				$thePage .= ' | 
';				
				}
			}	
			
			//[nws_custom location='lldp1']
			$att = [
						'name' => 'Timely Information',
						'location' => 'lldp1',
						'parameters' => null,
						'date_range' => 'current',
						'order' => 'asc'
					];			
			
			$nws_custom = Water_The_Theme_Public::nws_custom($att);			
			
			$thePage .= $nws_custom;			
			
		} // end Timely Information
			
		// Statics Page - last 5 lake data
		// [usgs_custom name="Statistics" location='03071590,03071600' parameters='00010,00065,62614' date_range='previous,5,16:00' order='desc'] 		
		if ($short_code_name === 'Statistics') {
			$statistics = [];			
			
			foreach ($xml_tree->body->div->div as $div) {
			
				$value = (string)$div;
				$class = (string)$div->attributes()->class;		
				$datetime = (string)$div->attributes()->datetime;
				list($sitename, $parameter) = explode(' ', $class);
				$sitename = ucwords(preg_replace('/_/', ' ', $sitename));
				$parameter = ucwords(preg_replace('/_/', ' ', $parameter));
				if ($parameter === 'Lake Or Reservoir Water Surface Elevation Above Ngvd 1929') {
					$parameter = '(AMSL)';
				}
				if ($sitename === 'Cheat Lake Near Stewartstown Wv') {
					if ($parameter === '(AMSL)') {
						$sitename = 'Lake Level';
					} else { 
						$sitename = 'Lake';
					}				
				}
				if ($sitename === 'Cheat River At Lake Lynn Pa') {
					$sitename = 'Tail Race Level';
					$parameter = ' (AMSL)';				
				}
				if ($sitename === 'Cheat River At Davidson Pa') {
					$sitename = 'Below Dam';				
				}
	
				if ($sitename === 'Tail Race Level') {
					$value = (float)$value + 776.63;				
				}
				$statistics[] = "| $sitename $parameter | $value |  | 
";		
				
				//PC::debug($value . " " . $sitename . " " . $parameter);	
			} // end foreach
			
			list($array1, $array2, $array3) = array_chunk($statistics, ceil(count($statistics) / 3));
			foreach($array1 as $key => $value ) {
				$thePage .= $array2[$key];				
				$thePage .= $array3[$key];				
				$thePage .= $value;
			}
			//PC::debug($count);	
						
		}	// end Statistics	
		
		$thePage .= '
';
		return $thePage;
	
	} // function water the theme
	
	public function nws_custom( $att ) {
			
		
		list($name, $location, $parameters, $date_range, $order) = [
																				$att['name'],
																				$att['location'],
																				$att['parameters'],
																				$att['date_range'],
																				$att['order']
																			];
		$locations = explode(',', $location);
		
		// Tail Race Level = Gage Datum + Gage Height
		foreach ($locations as $location) {
			$thePage = get_transient('nws_custom-' . $name . $location . $date_range . $parameters . $order );
			if ( !$thePage ) {
			
			$url = "http://water.weather.gov/ahps2/hydrograph_to_xml.php?gage=$location&output=xml";
			$response = wp_remote_get( $url );
			$data = wp_remote_retrieve_body( $response );
			if ( ! $data ) {
				return 'Nation Weather Service is not Responding.';
			}
			$xml_tree = simplexml_load_string( $data );
			if ( False === $xml_tree ) {
				return 'Unable to parse NWS XML';
			}
			
			// space to underscore; all lower case; only special character allowed is underscored
			$SiteName = (string)$xml_tree->attributes()->name;	
			$SiteName = preg_replace('/[^A-Za-z0-9_]/', '', strtolower(preg_replace('/\s+/', '_', $SiteName)));
			$waterlevel = (string)$xml_tree->zerodatum;								
					
			$c = 0;			
			foreach ( $xml_tree->observed->datum as $datum ) {
					
				// in javascript this works out of the box (* 1000)
				$datetime = strtotime($datum->valid) * 1000;
				$gageheight = $datum->primary;
				$waterflow = (string)$datum->secondary;
				
				if ($waterflow === '-999' || $waterflow === 0) {
					$waterflow = '0 cfs';						
				} else {
					$waterflow = $waterflow * 1000;	
					$waterflow = $waterflow . " cfs";					
				}
						
				$tail_race_level = (float)$waterlevel + (float)$gageheight;
				if($c === 0 && $date_range === 'current') {
					$thePage .= "| Tail Race Level (AMSL) | $tail_race_level ft |  | 
";
					//$thePage .= "| Gage Datum (AMSL) | $waterlevel ft |  | 
";
					//$thePage .= "| Tail Water Flow | $waterflow |  | 
";
					break;			
				} else {
					$thePage .= "| Tail Race Level (AMSL) | $tail_race_evel |  | 
";
					//$thePage .= "| Gage Datum (AMSL) | $waterlevel ft |  | 
";
					//$thePage .= "| Tail Water Flow | $waterflow |  | 
";				
				}				
				$c++;			
					
			} // foreach xml_tree as site data		
			
		} // foreach NWS location		
		set_transient( 'nws_custom-' . $name . $location . $date_range . $parameters . $order, $thePage, 60 * 15 );
		}
		return $thePage;
	}	// function nws_custom	
}