<?php
date_default_timezone_set('America/Lima');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token, Authorization');
try{
	$response_json	=array('success'=>false, 'num_rows'=>-1, 'rows'=>array(), "messages"=>"Estas intentando algo inusual en el sistema");
	require_once("./class/GLibfunciones.php");
	$OConex = new GConector();
	$init_stmt=$OConex->stmt_init();
	$OUsuario = new GUsuario();

	$data = json_decode(file_get_contents('php://input'));

    $response = "";

	switch($_GET['oper']){
		case 'listar':
			$sql=$OUsuario->lista();
			if(!$init_stmt->prepare($sql))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);		
			$init_stmt->execute();
			$result=$init_stmt->get_result();
			$response_json['success']=true;
			$response_json['totalItemCount']=$result->num_rows;
			if($response_json['totalItemCount']==0)
				break;			
			$i=0;
			while($rows=$result->fetch_assoc()){
				array_push($response_json['rows'], array_merge($rows, array("item"=>++$i)));
			}
            $response = $response_json['rows'];  
		break;
		case 'listarRolDet':
			$sql=$OUsuario->listaRolDet();
			if(!$init_stmt->prepare($sql))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);		
			$init_stmt->execute();
			$result=$init_stmt->get_result();
			$response_json['success']=true;
			$response_json['totalItemCount']=$result->num_rows;
			if($response_json['totalItemCount']==0)
				break;			
			$i=0;
			while($rows=$result->fetch_assoc()){
				array_push($response_json['rows'], array_merge($rows, array("item"=>++$i)));
			}
            $response = $response_json['rows'];  
		break;
		case 'guardar':
			if(empty($data->id)){
				$sql=$OUsuario->guardar();
			}else{
				$sql=$OUsuario->modificar();
			}

			if(!$init_stmt->prepare($sql))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);
			if(!$init_stmt->bind_param('iiiissssi', $data->idRolSistema,$data->idEmpresa,$data->idLocal,$data->idEmpleado,$data->usuario,$data->clave,$data->feIngreso,$data->feBaja,$data->id))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);
			$init_stmt->execute();


			$response_json['success']=true;
			$response_json['affected_rows']=$init_stmt->affected_rows;
			$response_json['messages']=($response_json['affected_rows']==1)?"Se registro con éxito los datos del correctamente":"No se realizaron cambios";
            $response = $response_json;  
		break;
		case 'guardarRol':
			if(empty($data->id)){
				$sql=$OUsuario->guardarRol();
			}else{
				$sql=$OUsuario->modificarRol();
			}

			if(!$init_stmt->prepare($sql))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);
			if(!$init_stmt->bind_param('siii', $data->noRolSistema,$data->idEmpresa,$data->idLocal,$data->id))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);
			$init_stmt->execute();

			$response_json['success']=true;
			$response_json['affected_rows']=$init_stmt->affected_rows;
			$response_json['messages']=($response_json['affected_rows']==1)?"Se registro con éxito los datos del correctamente":"No se realizaron cambios";
            $response = $response_json;  
		break;
		case 'listarRol':
			$sql=$OUsuario->listaRol();
			if(!$init_stmt->prepare($sql))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);		
			$init_stmt->execute();
			$result=$init_stmt->get_result();
			$response_json['success']=true;
			$response_json['totalItemCount']=$result->num_rows;
			if($response_json['totalItemCount']==0)
				break;			
			$i=0;
			while($rows=$result->fetch_assoc()){
				array_push($response_json['rows'], array_merge($rows, array("item"=>++$i)));
			}
            $response = $response_json['rows'];  
		break;
		case 'listarEmpresa':
			$sql=$OUsuario->listaEmpresa();
			if(!$init_stmt->prepare($sql))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);		
			$init_stmt->execute();
			$result=$init_stmt->get_result();
			$response_json['success']=true;
			$response_json['totalItemCount']=$result->num_rows;
			if($response_json['totalItemCount']==0)
				break;			
			$i=0;
			while($rows=$result->fetch_assoc()){
				array_push($response_json['rows'], array_merge($rows, array("item"=>++$i)));
			}
            $response = $response_json['rows'];  
		break;
		case 'listarLocal':
			$sql=$OUsuario->listaLocal();
			if(!$init_stmt->prepare($sql))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);		
			$init_stmt->execute();
			$result=$init_stmt->get_result();
			$response_json['success']=true;
			$response_json['totalItemCount']=$result->num_rows;
			if($response_json['totalItemCount']==0)
				break;			
			$i=0;
			while($rows=$result->fetch_assoc()){
				array_push($response_json['rows'], array_merge($rows, array("item"=>++$i)));
			}
            $response = $response_json['rows'];  
		break;
		case 'listarEmpleado':
			$sql=$OUsuario->listaEmpleado();
			if(!$init_stmt->prepare($sql))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);		
			$init_stmt->execute();
			$result=$init_stmt->get_result();
			$response_json['success']=true;
			$response_json['totalItemCount']=$result->num_rows;
			if($response_json['totalItemCount']==0)
				break;			
			$i=0;
			while($rows=$result->fetch_assoc()){
				array_push($response_json['rows'], array_merge($rows, array("item"=>++$i)));
			}
            $response = $response_json['rows'];  
		break;
		case 'eliminar':
			if(!isset($data) || empty($data))
				break;
			$sql=$OUsuario->eliminar();
			if(!$init_stmt->prepare($sql))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico<br/>", $OConex->error, $OConex->errno);
			if(!$init_stmt->bind_param('i', $data))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);
			$init_stmt->execute();
			$response_json['success']=TRUE;
			$response_json['affected_rows']=$init_stmt->affected_rows;
			$response_json['messages']=($init_stmt->affected_rows==1)?"Se elimino con éxito el registro":"";
			if($init_stmt->affected_rows!=1 && $init_stmt->errno!=0)
				$response_json['messages']=errorMySQL($init_stmt->errno);

			$response = $response_json;  
		break;
		case 'listarOpcionesRol':
			$sql=$OUsuario->listaOpcionesRol();
			if(!$init_stmt->prepare($sql))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);
			if(!$init_stmt->bind_param('i', $_GET['id']))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);
			$init_stmt->execute();
			$result=$init_stmt->get_result();
			$response_json['success']=true;
			$response_json['totalItemCount']=$result->num_rows;
			if($response_json['totalItemCount']==0)
				break;			
			$i=0;
			while($rows=$result->fetch_assoc()){
				array_push($response_json['rows'], array_merge($rows, array("item"=>++$i)));
			}
            $response = $response_json['rows'];  
		break;
		case 'guardarPermisosRol':

			// Preparar las consultas SQL
			$init_stmt_insert=$OConex->stmt_init();
			$sqlInsert=$OUsuario->insertaDetalleRol();
			$init_stmt_insert->prepare($sqlInsert);

			$init_stmt_delete=$OConex->stmt_init();
			$sqlDelete=$OUsuario->eliminaDetalleRol();
			$init_stmt_delete->prepare($sqlDelete);

			$init_stmt_exist=$OConex->stmt_init();
			$sqlExist=$OUsuario->existeDetalleRol();
			$init_stmt_exist->prepare($sqlExist);

			// Recorrer la lista de objetos y realizar las validaciones
			foreach ($data as $item) {
				$estado = $item->estado;
				$idRolSistema = $item->idRolSistema;
				$idWinSistemas = $item->idWinSistemas;
				
				if ($estado == 1) {
					// Verificar si ya existe un registro con los mismos valores de idRolSistema e idWinSistemas
					$init_stmt_exist->bind_param("ii", $idRolSistema, $idWinSistemas);
					$init_stmt_exist->execute();
					$existResult = $init_stmt_exist->get_result();
					$count = $existResult->fetch_row()[0];

					if ($count == 0) {
						// No existe un registro, por lo que se puede realizar la inserción
						$init_stmt_insert->bind_param("ii", $idRolSistema, $idWinSistemas);
						$init_stmt_insert->execute();
						//echo "Registro insertado exitosamente";
					} else {
						//echo "El registro ya existe, no se realizó ninguna acción";
					}
				} elseif ($estado == 0) {
					// Verificar si existe un registro con los mismos valores de idRolSistema e idWinSistemas
					$init_stmt_exist->bind_param("ii", $idRolSistema, $idWinSistemas);
					$init_stmt_exist->execute();
					$existResult = $init_stmt_exist->get_result();
					$count = $existResult->fetch_row()[0];

					if ($count > 0) {
						// Existe un registro, por lo que se puede realizar la eliminación
						$init_stmt_delete->bind_param("ii", $idRolSistema, $idWinSistemas);
						$init_stmt_delete->execute();
						//echo "Registro eliminado exitosamente";
					} else {
						//echo "El registro ya está eliminado, no se realizó ninguna acción";
					}
				}
			}

			$response_json['success']=true;
			//$response_json['affected_rows']=$init_stmt->affected_rows;
			//$response_json['messages']=($response_json['affected_rows']==1)?"Se registro con éxito los datos del correctamente":"No se realizaron cambios";
            $response = $response_json;  
		break;
		case 'eliminarRol':
			if(!isset($data) || empty($data))
				break;
			$sql=$OUsuario->eliminarRol();
			if(!$init_stmt->prepare($sql))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico<br/>", $OConex->error, $OConex->errno);
			if(!$init_stmt->bind_param('i', $data))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);
			$init_stmt->execute();
			$response_json['success']=TRUE;
			$response_json['affected_rows']=$init_stmt->affected_rows;
			$response_json['messages']=($init_stmt->affected_rows==1)?"Se elimino con éxito el registro":"";
			if($init_stmt->affected_rows!=1 && $init_stmt->errno!=0)
				$response_json['messages']=errorMySQL($init_stmt->errno);

			$response = $response_json;  
		break;
    }
	echo json_encode($response);
}catch(Exception $e){
	echo $e;
}
?>