<?php
class UAdmin extends Usuario{

	public function __construct(){
		parent::__construct();
	}

	public function autenticarAdministrador($usuario,$contrasena){
		$query = 'SELECT u1.usu_id AS id, u1.usu_apodo AS apodo, u1.usu_nombre AS nombre, u1.usu_ap_paterno AS ap_paterno, u1.usu_ap_materno AS ap_materno, u1.usu_correo AS correo, u1.usu_estado AS estado, u1.usu_privilegio AS privilegio, COUNT(DISTINCT u2.usu_id) AS cant_u, COUNT(DISTINCT est_id) AS cant_e
				FROM usuario AS u1, usuario AS u2, estacionamiento
				WHERE u1.usu_apodo = ? AND u1.usu_contrasena = ? AND u1.usu_privilegio = 2 AND u2.usu_privilegio = 1;';
		$rs = $this->cn->Execute($query,array($usuario,$contrasena));
		if(!empty($rs) && !$rs->EOF){
			$usuario = $rs->GetArray();
			$rs->Close();
			return $usuario[0];
		}
		return false;
	}

	public function nuevoEstacionamiento($nombre,$telefono,$latitud,$longitud,$direccion,$horario,$descripcion){
		$query = 'INSERT INTO estacionamiento(est_nombre, est_telefono, est_disponibilidad, est_latitud, est_longitud, est_direccion, est_horario, est_descripcion, est_creado, est_editado) VALUES(?,?,1,?,?,?,?,?,NOW(),NOW());';
		$rs = $this->cn->Execute($query,array($nombre,$telefono,$latitud,$longitud,$direccion,$horario,$descripcion));
		if($this->cn->Affected_Rows()==1){
			$rs->Close();
			$_SESSION['usuario']['cant_e']++;
			return $this->cn->insert_ID();
		}
		return false;
	}

	public function nuevoUsuario($apodo,$contrasena,$correo,$estado){
		$query = 'INSERT INTO usuario(usu_apodo,usu_contrasena,usu_correo,usu_estado,usu_privilegio) VALUES(?,sha1(?),?,?,1);';
		$rs = $this->cn->Execute($query,array($apodo,$contrasena,$correo,$estado));
		if($this->cn->Affected_Rows()==1){
			$rs->Close();
			$_SESSION['usuario']['cant_u']++;
			return $this->cn->insert_ID();
		}
		return false;
	}

	public function actualizarUsuario($id,$apodo,$contrasena,$correo,$estado){
		if(!empty($contrasena)){
			$query = 'UPDATE usuario SET usu_apodo = ?, usu_contrasena = sha1(?), usu_correo = ?, usu_estado = ? WHERE usu_id = ?;';
			$rs = $this->cn->Execute($query,array($apodo,$contrasena,$correo,$estado,$id));
		}else{
			$query = 'UPDATE usuario SET usu_apodo = ?, usu_correo = ?, usu_estado = ? WHERE usu_id = ?;';
			$rs = $this->cn->Execute($query,array($apodo,$correo,$estado,$id));
		}
		if($this->cn->Affected_Rows()==1){
			$rs->Close();
			return true;
		}
		return false;
	}

	public function eliminarUsuario($id){
		$query = 'DELETE FROM usuario WHERE usu_id = ? LIMIT 1;';
		$rs = $this->cn->Execute($query,array($id));
		if($this->cn->Affected_Rows()==1){
			$rs->Close();
			return true;
		}
		return false;
	}

	public function estacionamiento($id){
		$query = 'SELECT est_id AS id, IF(est_nombre<>"",est_nombre,CONCAT("Estacionamiento ",est_id)) AS nombre, est_direccion AS direccion, DATE_FORMAT(est_creado,"%H:%i:%s %d-%m-%Y") AS f_ingreso, DATE_FORMAT(est_editado,"%H:%i:%s %d-%m-%Y") AS f_actualizacion, est_latitud AS latitud, est_longitud AS longitud
					FROM estacionamiento
					WHERE est_id = ? LIMIT 1;';
		$rs = $this->cn->Execute($query,array($id));
		if(!empty($rs) && !$rs->EOF){
			$estacionamiento = $rs->GetArray();
			$rs->Close();
			return $estacionamiento[0];
		}
		return false;
	}

	public function estacionamientos(){
		$query = 'SELECT est_id AS id, IF(est_nombre<>"",est_nombre,CONCAT("Estacionamiento ",est_id)) AS nombre, est_direccion AS direccion, DATE_FORMAT(est_creado,"%H:%i:%s %d-%m-%Y") AS f_ingreso, DATE_FORMAT(est_editado,"%H:%i:%s %d-%m-%Y") AS f_actualizacion, COUNT(usuario_usu_id) AS cant_u
					FROM usu_administra_est RIGHT JOIN estacionamiento ON estacionamiento_est_id = est_id
					GROUP BY id ORDER BY f_ingreso DESC, cant_u DESC, f_actualizacion DESC, est_id ASC;';
		$rs = $this->cn->Execute($query);
		if(!empty($rs) && !$rs->EOF){
			$est = $rs->GetArray();
			$rs->Close();
			return $est;
		}
		return false;
	}

	public function usuario($id){
		$query = 'SELECT usu_id AS id, usu_apodo AS apodo, CONCAT(usu_nombre," ",usu_ap_paterno," ",usu_ap_materno) AS nombre, usu_correo AS correo, IF(usu_estado=1,"Activo","Desactivado") AS estado
					FROM usuario
					LEFT JOIN usu_administra_est
					ON usu_id = usuario_usu_id
					WHERE usu_privilegio = 1 AND usu_id = ?
					GROUP BY usu_id LIMIT 1;';
		$rs = $this->cn->Execute($query,array($id));
		if(!empty($rs) && !$rs->EOF){
			$usu = $rs->GetArray();
			$rs->Close();
			return $usu[0];
		}
		return false;
	}

	public function usuarios(){
		$query = 'SELECT usu_id AS id, usu_apodo AS apodo, usu_correo AS correo, IF(usu_estado=1,"Activo","Desactivado") AS estado, COUNT(estacionamiento_est_id) AS cant_e
					FROM usuario
					LEFT JOIN usu_administra_est
					ON usu_id = usuario_usu_id
					WHERE usu_privilegio = 1
					GROUP BY usu_id;';
		$rs = $this->cn->Execute($query);
		if(!empty($rs) && !$rs->EOF){
			$usu = $rs->GetArray();
			$rs->Close();
			return $usu;
		}
		return false;
	}

	public function usuariosEstacionamiento($id){
		$query = 'SELECT usu_id AS id, usu_apodo AS apodo, usu_correo AS correo, IF(usu_estado=1,"Activo","Desactivado") AS estado, DATE_FORMAT(uae_inicio,"%d-%m-%Y") AS inicio, DATE_FORMAT(uae_termino,"%d-%m-%Y") AS termino, IF(uae_estado=1,"Activo","Desactivado") AS estado_administrador
					FROM usuario
					LEFT JOIN usu_administra_est
					ON usu_id = usuario_usu_id
					LEFT JOIN estacionamiento 
					ON estacionamiento_est_id = est_id
					WHERE est_id = ?;';
		$rs = $this->cn->Execute($query,array($id));
		if(!empty($rs) && !$rs->EOF){
			$usu = $rs->GetArray();
			$rs->Close();
			return $usu;
		}
		return false;
	}

	public function estacionamientosUsuario($id){
		$query = 'SELECT est_id AS id, IF(est_nombre<>"",est_nombre,CONCAT("Estacionamiento ",est_id)) AS nombre, IF(uae_estado=1,"Activo","Desactivado") AS estado, DATE_FORMAT(uae_inicio,"%d-%m-%Y") AS inicio, DATE_FORMAT(uae_termino,"%d-%m-%Y") AS termino, est_direccion AS direccion
					FROM usuario LEFT JOIN usu_administra_est AS uae ON usu_id = uae.usuario_usu_id LEFT JOIN estacionamiento ON uae.estacionamiento_est_id = est_id
					WHERE usu_id = ? ORDER BY uae_termino ASC;';
		$rs = $this->cn->Execute($query,array($id));
		if(!empty($rs) && !$rs->EOF){
			$est = $rs->GetArray();
			$rs->Close();
			return $est;
		}
		return false;
	}

	public function nombreEstacionamientos($id){
		$query = 'SELECT est_id AS value, IF(est_nombre<>"",est_nombre,CONCAT("Estacionamiento ",est_id)) AS label FROM estacionamiento WHERE est_id NOT IN(SELECT estacionamiento_est_id FROM usu_administra_est WHERE usuario_usu_id = ?);';
		$rs = $this->cn->Execute($query,array($id));
		if(!empty($rs) && !$rs->EOF){
			$est = $rs->GetArray();
			$rs->Close();
			return $est;
		}
		return false;
	}

	public function obtenerUAE($usu_id,$est_id){
		$query = 'SELECT IF(uae_estado=1,"Activo","Desactivado") AS estado, DATE_FORMAT(uae_inicio,"%d-%m-%Y") AS inicio, DATE_FORMAT(uae_termino,"%d-%m-%Y") AS termino
					FROM usuario LEFT JOIN usu_administra_est AS uae ON usu_id = uae.usuario_usu_id LEFT JOIN estacionamiento ON uae.estacionamiento_est_id = est_id
					WHERE usu_id = ? AND est_id = ? LIMIT 1;';
		$rs = $this->cn->Execute($query,array($usu_id,$est_id));
		if(!empty($rs) && !$rs->EOF){
			$uae = $rs->GetArray();
			$rs->Close();
			return $uae[0];
		}
		return false;
	}

	public function nuevoUAE($usu_id,$est_id,$f_inicio,$f_termino,$estado){
		$query = 'INSERT INTO usu_administra_est(usuario_usu_id,estacionamiento_est_id,uae_inicio,uae_termino,uae_estado) VALUES(?,?,STR_TO_DATE(?,"%d-%m-%Y"),STR_TO_DATE(?,"%d-%m-%Y"),?);';
		$this->cn->Execute($query,array($usu_id,$est_id,$f_inicio,$f_termino,$estado));
		if($this->cn->Affected_Rows()==1){
			return true;
		}
		return false;
	}

	public function actualizarUAE($usu_id,$est_id,$f_inicio,$f_termino,$estado){
		$query = 'UPDATE usu_administra_est SET uae_inicio = STR_TO_DATE(?,"%d-%m-%Y"), uae_termino = STR_TO_DATE(?,"%d-%m-%Y"), uae_estado = ? WHERE usuario_usu_id = ? AND estacionamiento_est_id = ? LIMIT 1;';
		$this->cn->Execute($query,array($f_inicio,$f_termino,$estado,$usu_id,$est_id));
		if($this->cn->Affected_Rows()==1){
			return true;
		}
		return false;
	}

	public function eliminarUAE($usu_id,$est_id){
		$query = 'DELETE FROM usu_administra_est WHERE usuario_usu_id = ? AND estacionamiento_est_id = ? LIMIT 1;';
		$this->cn->Execute($query,array($usu_id,$est_id));
		if($this->cn->Affected_Rows()==1){
			return true;
		}
		return false;
	}

	public function __destruct(){
		parent::__destruct();
	}
}
?>