<?php
class EVAutoComplete extends AppEvento{
	
	public $asociados = array();
	protected $_parametroElemento = array();
	protected $_parametros = array();
	public $caracteres_minimos = 2;
	protected  $_clase = 'Cliente';
	protected  $_metodo = 'autocompletar';
	protected $_principal;	
	public function __construct($evento, $clase, $metodo){

		parent::__construct($evento);
		$this->setClase($clase);
		$this->setMetodo($metodo);
	}
	
	public function renderEvento(){
		$script = "$( '".$this->padre->identificadorScript()."' ).catcomplete({
			source: function( request, response ) {
				 myApi = conectorws;
    	var datos = {objeto: '".$this->_clase."', 
    				metodo :'".$this->_metodo."',
					featureClass: 'P',
					style: 'full',
					maxRows: 12,";
		foreach ($this->_parametroElemento as $key => $elemento){
			$script .= $key.": $('".$elemento->identificadorScript() ."').val(), " ;
		}
		foreach ($this->_parametros as $key => $valor){
			$script .= $key .": '".$valor ."', ";
		}
				$script .= "busqueda: request.term};
    	 
    	var listado =  myApi.getautocompletar(datos);
    			response(listado);
			},
			minLength: ".$this->caracteres_minimos.",
			select: function( event, ui ) {
				";
		foreach ($this->asociados as $asociado){
			$campo = $asociado["campo"];
			$script .= "$('".$campo->identificadorScript()."').val(ui.item.".$asociado["dato"].");";
		}
		
		
		$script .= "
					if(ui.item.tipo_accion != undefined){
						if(ui.item.tipo_accion = 'modal'){
							var target = creaModal();
								
							var url = ui.item.accion;
								
								var datos = {modal: true};
							datos[ui.item.campo] = ui.item.value;
							datos['destino_autocomplete'] = ". (isset($this->_principal)?'\''.$this->_principal->identificadorScript().'\'':'undefined'). ";
				
							$.get(url, datos,function(data){
								$('#'+ $(target).attr('id')).html(data);
				
								$('#'+ $(target).attr('id')).modal({
							        keyboard:true,
							        backdrop:true
							    });
							}); 
	}
				
				
				}
			},
			open: function() {
				//$( this ).removeClass( 'ui-corner-all' ).addClass( 'ui-corner-top' );
			},
			close: function() {
				//$( this ).removeClass( 'ui-corner-top' ).addClass( 'ui-corner-all' );
			}
		});";
		if(isset($this->_principal)){
			
		
		$script .= "
				$('".$this->_principal->identificadorScript()."').change(function(){
	 				myApi = conectorws;
    				var datos = {objeto: '".$this->_clase."', 
    					metodo :'".$this->_metodo."',
						featureClass: 'P',
						style: 'full',
						maxRows: 12,";
					
					foreach ($this->_parametros as $key => $valor){
						$script .= $key .": '".$valor ."', ";
					}
				$script .= "id: $(this).val()};
    	 
    	var listado =  myApi.getautocompletar(datos);
						console.log(listado);
						$( '".$this->padre->identificadorScript()."' ).val(listado.value);
				});
				";
		}
		return $script;
	}
	
	public function setVaciasOnClick(bool $estado){
		
	}
	
	public function addAsociado($elemento , $dato, $principal = false){
		$this->asociados[] = array('campo'=> $elemento, 'dato'=> $dato);
		if($principal)
			$this->_principal = $elemento;
	}
	
	public function setMinimoCaracteres($numero){
		$this->caracteres_minimos = $numero;
	}
	/**
	 * Valores del formulario que se pasaran a el autocmpletar
	 * @param string $nombre Nombre del parametro
	 * @param AppElementoFormulario $elemento Campo del formulario
	 */
	public function addParametroElemento( $nombre, AppElementoFormulario $elemento){
		$this->_parametroElemento[$nombre] = $elemento;
	}
	public function AddParametro($nombre, $valor){
		$this->_parametros[$nombre] = $valor;
	} 
	
	public function setClase($clase){
		$this->_clase = $clase;
	}
	public function setMetodo($metodo){
		$this->_metodo = $metodo;
	}
}

