<?php 

class AppListadoResultado {
	
	
	public $datos;
	public $sumatorios;
	public $total;
	
	public $clase_listado;
	
	public function __construct(){
		
	}
	
	public function preparaDatosFila($fila){
		$fila_tratada = array();
		foreach ($fila as $key => $value){
			
			$formatoFecha= 'd/m/Y H:i:s';
			$valor = $value;
			if(strlen($valor)>19)
				$valor = substr($valor,0, 19);
			if (preg_match ( '#([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})#', $valor )) {
				$fecha = DateTime::createFromFormat ( 'Y-m-d H:i:s', $valor );
				$value = $fecha->format ( $formatoFecha);
			}elseif($valor =='0000-00-00 00:00:00'){
				$value = '';
			}else{
				
				if(strlen($valor)>10)
					$valor = substr($valor,0, 10);
				$formatoFecha= 'd/m/Y';
				if (preg_match ( '#([0-9]{4})-([0-9]{2})-([0-9]{2})#', $valor )) {
					$fecha = DateTime::createFromFormat ( 'Y-m-d', trim ( $valor ) );
					$value = $fecha->format ( $formatoFecha);
				}elseif($valor == '0000-00-00'){
					$value = '';
				}else{
					
				}
			}
				
			$fila_tratada['$'.$key.'#'] = $value;
		}
		
		
		
		return $fila_tratada;
	}
	public function reemplaza_datosCampo($campo , $datos){
		
		$dato = $campo['valor'];
		
		$dato = str_replace(array_keys($datos), array_values($datos), $dato);
		
		if($campo['tipo']== 'multiple' && isset($campo['valores'][$dato])){
			$dato_valores = $campo['valores'][$dato];
			$dato = str_replace(array_keys($datos), array_values($datos), $dato_valores);
		}
		
		if($campo['tipo']== 'numero'){
			$dato = round($dato, $campo['decimales']);
		}
		
		
		
		return $dato;
	}
	public function tratarDatos(){
		
		$clase = $this->clase_listado;
		
		
		$objeto = new $clase;
		$filas_tratadas = array();
		
		if($objeto instanceof AppListado){
			$columnas = $objeto->getColumnas();
			foreach ($this->datos  as $posicion => $fila){
				$datos_tratados = $this->preparaDatosFila($fila);
				$datos_fila = array();
				foreach ($columnas as $columna){
					$filas_tratadas[$posicion][$columna['name']] = $this->reemplaza_datosCampo($columna, $datos_tratados);
				}
			}
			
			
		}
		
		return $filas_tratadas;
	}
	
	public function sumatoriosTratados(){
		$sumatorios = $this->sumatorios;
		$clase = $this->clase_listado;
		
		
		$objeto = new $clase;
		
		
		if($objeto instanceof AppListado){
			$columnas = $objeto->getColumnas();
			foreach ($columnas  as $actual){
				if(isset($actual['sumatorio']) && $actual['sumatorio']){
					$sumatorios[$actual['name']] = round($sumatorios[$actual['name']], $actual['decimales']);
				}
			}
				
				
		}
		return $sumatorios;
	}
	
	public function render(){
		$datos = $this->tratarDatos();
		$sumatorios = $this->sumatoriosTratados();
		$resultado = array(
				'datos'=> $datos,
				'sumatorios'=> $sumatorios,
				'total'=>  $this->total
				
		);
		
		return $resultado;
		
	}
	
	
}