<?php
/**
* Copyright 2013 HubSpot, Inc.
*
*   Licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.
*   You may obtain a copy of the License at
*
*       http://www.apache.org/licenses/LICENSE-2.0
*
*   Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied.  See the License for the specific
* language governing permissions and limitations under the
* License.
*/
if (!class_exists('HubSpot_BaseClient')) {
	require_once('class.baseclient.php');
}

class HubSpot_Forms extends HubSpot_Baseclient{

	protected $API_PATH = 'contacts';
	protected $API_VERSION = 'v1';

	/**
	* Submit form data
	*
	*@param portalId: The ID # for your portal
	*		guid: The unique ID for the form (found in Forms tool in your Hubspot account)
	*		form_fields: A key-value array of the form fields submitted by the end user. 
	*					 The key should match the key for the contact property in Hubspot. 
	*		hs_context: A key-value array of the contextual info for the submission 
	*					This includes: IP address, Page URL, tracking cookie, etc.
	*
	*		Note: The fields submitted via the API do not need to match the fields available on the actual form
	**/
	public function submit_form($portalId, $guid, $form_fields, $hs_context){
		$url_base = 'https://forms.hubspot.com/uploads/form/v2/'.$portalId.'/'.$guid;
		$form_fields['hs_context'] = json_encode($hs_context);
		$param_string = '&'.http_build_query($form_fields,'','&');
		try{
			return json_decode($this->execute_post_request($this->get_forms_request_url($url_base,null),$param_string,TRUE));
		}
		catch(HubSpot_Exception $e){
			print_r("Unable to submit form: ".$e);
		}

	}

	/**
	* Get all forms
	*
	*
	*
	*@return returns JSON objects for all forms in portal
	*@throws HubSpot_Exception
	**/
	public function get_forms(){
		$endpoint = 'forms';
		try{
			return json_decode($this->execute_get_request($this->get_request_url($endpoint,null)));
		}
		catch(HubSpot_Exception $e){
			print_r("Unable to retrieve forms: ".$e);
		}
	}

	/**
	* Get single form by ID
	*
	*@param guid: the unique ID for the Form
	*
	*@return returns JSON objects for all forms in portal
	*@throws HubSpot_Exception
	**/
	public function get_form_by_id($guid){
		$endpoint = 'forms/'.$guid;
		try{
			return json_decode($this->execute_get_request($this->get_request_url($endpoint,null)));
		}
		catch(HubSpot_Exception $e){
			print_r("Unable to retrieve form: ".$e);
		}
	}

	/**
	* Create a Form	
	*
	*@param form_data: Data in array format for the form being created.
	*		fields: Array of arrays for fields to be added to the form.
	*				These arrays will be added to the form_data array, 
	*				no need to include a 'fields' entry in the form_data array passed to function
	*
	*@return Response body from HTTP POST request
	*@throws HubSpot_Exception
	**/
	public function create_form($form_data, $fields){
		$endpoint = 'forms';
		$form_data['fields'] = $fields;
		try{
			return json_decode($this->execute_JSON_post_request($this->get_request_url($endpoint,null),json_encode($form_data)));
		}
		catch(HubSpot_Exception $e){
			print_r("Unable to create form: ".$e);
		}
	}

	/**
	* Create a Form	
	*
	*@param guid: Unique ID for the form
	*		form_data: Data in array format for the form being created.
	*		fields: Array of arrays for fields to be added to the form.
	*				These arrays will be added to the form_data array, 
	*				no need to include a 'fields' entry in the form_data array passed to function
	*
	*@return Response body from HTTP POST request
	*@throws HubSpot_Exception
	**/
	public function update_form($guid, $form_data, $fields){
		$endpoint = 'forms/'.$guid;
		$form_data['fields'] = $fields;
		try{
			return json_decode($this->execute_JSON_post_request($this->get_request_url($endpoint,null),json_encode($form_data)));
		}
		catch(HubSpot_Exception $e){
			print_r("Unable to update form: ".$e);
		}
	}

	/**
	* Delete a form by ID
	*
	*@param guid: the unique ID for the Form
	*
	*@return Response body from HTTP POST request
	*@throws HubSpot_Exception
	**/
	public function delete_form($guid){
		$endpoint = 'forms/'.$guid;
		try{
			return json_decode($this->execute_delete_request($this->get_request_url($endpoint,null),null));
		}
		catch(HubSpot_Exception $e){
			print_r("Unable to delete form: ".$e);
		}
	}

	/**
	* Get fields for a specific Form
	*
	*@param guid: the unique ID for the Form
	*
	*@return JSON formatted array of fields
	*@throws HubSpot_Exception
	**/
	public function get_form_fields($guid){
		$endpoint = 'fields/'.$guid;
		try{
			return json_decode($this->execute_get_request($this->get_request_url($endpoint,null)));
		}
		catch(HubSpot_Exception $e){
			print_r("Unable to retrieve fields: ".$e);
		}
	}

	/**
	* Get a specific field for a specific Form
	*
	*@param guid: the unique ID for the Form
	*		field_name: the key for the field
	*
	*@return JSON formatted array of fields
	*@throws HubSpot_Exception
	**/
	public function get_single_form_field($guid, $field_name){
		$endpoint = 'fields/'.$guid.'/'.$field_name;
		try{
			return json_decode($this->execute_get_request($this->get_request_url($endpoint,null)));
		}
		catch(HubSpot_Exception $e){
			print_r("Unable to retrieve field: ".$e);
		}
	}


}




?>