<?php
/**
* [InputTypes datatype for input types]
*/
class InputTypes
{
	const TEXT = 'text';
	const NUMBER = 'number';
	const COLOR = 'color';
	const CHECK = 'checkbox';
	const BUTTON = 'button';
	const DATE = 'date';
	const DATETIME = 'datetime';
	const SUBMIT = 'submit';
	const HIDEN = 'hidden';
	const EMAIL = 'email';
}
/**
* [Form Form Generator Class]
*/
class Form {

	public $formContent = "";
	private $formName;
	private $formId;
	private $method;
	private $action;

	/**
	 * [__construct description]
	 * @param String $name   [description]
	 * @param String $id     [description]
	 * @param String $method [description]
	 * @param String $action [description]
	 */
	function __construct(String $name, String $id, String $method, String $action) {
		if ($name != "") {
			$this->formName = 'name="'.$name.'"';
		}
		if ($id != "") {
			$this->formId = 'id="'.$id.'"';
		}
		if ($method != "") {
			$this->method = 'method="'.$method.'"';
		}
		if ($action != "") {
			$this->$action = 'action="'.$action.'"';
		}
	}
	/**
	 * [addInput description]
	 * @param String     $type    Type of input element (text, number, color,checkbox, button, date, datetime, submit)
	 * @param String     $name    name of element
	 * @param String     $id      id of element
	 * @param String     $label   label of element
	 * @param String     $value   value of element
	 * @param boolean    $require require selector toggle
	 * @param boolean    $enabled enable selector toggle
	 */
	function addInput(String $type, String $name, String $id, String $label, String $value, Bool $require = false, Bool $enabled = true){
		$this->formContent .= '<div class="field">';
		if ($label != "") {
			$this->formContent .= '<div class="label">'.$label.'</div>';
		}
		$this->formContent .= '<input class="input" type="'.$type.'" name="'.$name.'" value="'.$value.'" ' . ($enabled ? '' : 'disabled')  . ($require ? '' : 'required') .'>';
		$this->formContent .= '</div>';
	}

	//TODO: add Group support
	/**
	 * [addSelect description]
	 * @param String  $name     name of element
	 * @param String  $id       id of element
	 * @param String  $label    label of element
	 * @param Array   $data     array of options [value => valueName]
	 * @param boolean $multiple multiple selector toggle
	 * @param boolean $enabled  enable selector toggle
	 */
	function addSelect(String $name, String $id, String $label, Array $data, Bool $multiple = false, Bool $require = false, Bool $enabled = true){
		$this->formContent .= '<div class="field">';
		if ($label != "") {
			$this->formContent .= '<div class="label">'.$label.'</div>';
		}
		$this->formContent .= '<select class="input"' . ($multiple ? '' : 'multiple') . ($enabled ? '' : 'disabled') . ($require ? '' : 'required') .'>';
		foreach ($data as $value => $text) {
			$this->formContent .= '<option value="' . $value . '">' . $text . '</option>';
		}
		$this->formContent .= '</select>';
		$this->formContent .= '</div>';
	}

	/**
	 * [addTextarea description]
	 * @param String     $name     name of element
	 * @param String     $id       id of element
	 * @param String     $label    label of element
	 * @param String     $value   value of element
	 * @param boolean    $enabled enable selector toggle
	 */
	function addTextarea(String $name, String $id, String $label, Array $value, Bool $require = false, Bool $enabled = true){
		$this->formContent .= '<div class="field">';
		if ($label != "") {
			$this->formContent .= '<div class="label">'.$label.'</div>';
		}
		$this->formContent .= '<textarea class="input"'  . ($enabled ? '' : 'disabled')  . ($require ? '' : 'required') .'>';
		$this->formContent .= $value;
		$this->formContent .= '</textarea>';
		$this->formContent .= '</div>';
	}

	/**
	 * [render function whitch dysplay generated form]
	 */
	function render(){
		self::addInput(InputTypes::SUBMIT, 'formSubmit', '', 'Submit', 'Submit');
		$form = '<form '.$this->formName.$this->formId.$this->method.$this->action.'">';
		$form .= $this->formContent;
		$form .= '</form>';
		echo 	$form;
	}
}
