<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors',1);
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, 'auth'=>false, 'rol'=>"", 'username'=>"",'password'=>"",'firstName'=>"",'lastName'=>"",'rows'=>array(), "messages"=>"Estas intentando algo inusual en el sistema");
    require_once("./class/GLibfunciones.php");
    $OConex = new GConector();
	$init_stmt=$OConex->stmt_init();
	$OSignin = new GSignin();
	$data = json_decode(file_get_contents('php://input'));
	$response = "";

    function generarTokenBase64($longitud = 32) {
        // Generar bytes aleatorios
        $bytesAleatorios = random_bytes($longitud);
        // Convertir bytes a base64
        $token = base64_encode($bytesAleatorios);
        // Eliminar caracteres especiales que no son seguros en una URL
        $token = strtr($token, '+/', '-_');
        return $token;
    }

	switch($_GET['oper']){
		case 'erp':
			if(isset($data->username, $data->password) && (!empty($data->username) && !empty($data->password) )){
    
                require_once("./class/GLibfunciones.php");
                $data->password=md5(sha1($data->password));                
                $sql=$OSignin->listarLoginUsuario();
                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('ss', $data->username, $data->password))
                    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['auth']=($result->num_rows==1); 
                
                if($response_json['auth']){
                    $response_json['success']=true;
                    $response_json['rows']=$result->fetch_assoc();
                    $response_json['rows']['states']=array();
                    $sql_state="SELECT ws.no_win_sistemas FROM detalle_rol AS dr LEFT OUTER JOIN win_sistemas AS ws ON ws.id_win_sistemas=dr.id_win_sistemas WHERE dr.id_rol_sistema=?";
                    if(!$init_stmt->prepare($sql_state))
                        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', $response_json['rows']['id_rol_sistema']))
                        throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);
                       
                    $init_stmt->execute();
                    $result_states=$init_stmt->get_result();       
                    if($result_states->num_rows>0){
                        while($row_rol=$result_states->fetch_assoc()){
                            array_push($response_json['rows']['states'], $row_rol['no_win_sistemas']);
                        }
                    }        
                    $response_json['token']=GAuth::SignIn(['id'=>$response_json['rows']['id_usuario'],'username'=>$response_json['rows']['no_completo'],'idrol'=>$response_json['rows']['id_rol_sistema']]);
                    $response_json['username']=$data->username;
                    $response_json['password']=$data->password;
                    $response_json['firstName']=$response_json['rows']['username'];
                    $response_json['lastName']=$response_json['rows']['apellidos'];
                    $response_json['id']=$response_json['rows']['id_usuario'];
                    $response_json['rol']=$response_json['rows']['no_rol_sistema'];
                    
                    $_SESSION['idUsuario']=$response_json['rows']['id_usuario'];
                    $_SESSION['token']=$response_json['token'];
            
                }    
                $response_json['messages']=(!$response_json['auth'])?"Los datos de acceso no coinciden en el sistema":"";
            } 
		break;					
		case 'aula':

			if(isset($data->username, $data->password) && (!empty($data->username) && !empty($data->password) )){   
                 
                $data->password=md5(sha1($data->password));               
                $sql=$OSignin->listarLoginAula();

               
               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('ss', $data->username, $data->password))
                    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['auth']=($result->num_rows==1); 
                
                if($response_json['auth']){
                    $response_json['success']=true;
                    $response_json['rows']=$result->fetch_assoc();
                    $response_json['rows']['states']=array();     
                    $response_json['token']=GAuth::SignIn(['id'=>$response_json['rows']['id'],'username'=>$response_json['rows']['no_completo']]);
                    $response_json['id']=$response_json['rows']['id'];                    
                    $_SESSION['idCliente']=$response_json['rows']['id'];
                    $_SESSION['token']=$response_json['token'];
            
                }    
                $response_json['messages']=(!$response_json['auth'])?"Los datos de acceso no coinciden en el sistema":"";
            }
        break;
        case 'actualizar':
			if(isset($data->username, $data->cpassword) && (!empty($data->username) && !empty($data->cpassword) )){   
                
                $data->cpassword=md5(sha1($data->cpassword)); 
                $sql=$OSignin->updateCliente();
                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('si', $data->cpassword, $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();

                $sql2=$OSignin->limpiarSolicitudes();
                if(!$init_stmt->prepare($sql2))
                    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('s',$data->email))
                    throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);
                $init_stmt->execute();

                $sql=$OSignin->listarCliente();               
               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', $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();
                $result=$init_stmt->get_result();      
                $response_json['auth']=($result->num_rows==1); 
                if($response_json['auth']){
                    $response_json['success']=true;
                    $response_json['rows']=$result->fetch_assoc();
                    $response_json['rows']['states']=array();     
                    $response_json['token']=GAuth::SignIn(['id'=>$response_json['rows']['id'],'username'=>$response_json['rows']['no_completo']]);
                    $response_json['id']=$response_json['rows']['id'];                    
                    $_SESSION['idCliente']=$response_json['rows']['id'];
                    $_SESSION['token']=$response_json['token'];
            
                }    
                $response_json['messages']=(!$response_json['auth'])?"Los datos de acceso no coinciden en el sistema":"";
            }
        break;
		case 'recuperarClave':
           
			if(!isset($data->email))
				break;

            $sql=$OSignin->validarCorreo();
            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('s', $data->email))
                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();
            $row = $result->fetch_assoc();

            if($row['isValid'] == 0){
                break;
            }

            $sql2=$OSignin->limpiarSolicitudes();
            if(!$init_stmt->prepare($sql2))
				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('s',$data->email))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);
			$init_stmt->execute();
                
			
			$sql=$OSignin->guardarPasswordRecovery();

			$token = generarTokenBase64();
			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('ss',$data->email, $token))
				throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);
			$init_stmt->execute();


            $sql2=$OSignin->obtenerDatosCliente();
            if(!$init_stmt->prepare($sql2))
                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('s', $data->email))
                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();
            $row = $result->fetch_assoc();


			$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 en el registro de pago";
           
			if($response_json['affected_rows']==1){
				$usuario = $data->email;
				$web= "https://aula.escuelalacasitadevalentina.pe/";
				$fecha=date("Y-m-d H:i:s");  


				$to = $data->email;
				$from = 'info@escuelalacasitadevalentina.com';
				$from_name = 'LA CASITA DE VALENTINA';
				
				
				
				$subject = 'Recuperación de contraseña'; 
					  //email body content
					  $htmlContent =sprintf('<div>
					  <table border="0" width="600" cellspacing="0" align="center">
					  <tbody>
					  <tr>
					  <td>
					  <p style="text-align: left; font-size: 15px; font-family: Verdana,Geneva,sans-serif; color: #234c9f; margin: 0; line-height: 21px;">Recuperación de la contraseña de Usuario</p>
					  <p style="text-align: left; font-size: 15px; font-family: Verdana,Geneva,sans-serif; color: #234c9f; margin: 0; line-height: 21px;">Estimado:</p>
					  </td>
					  </tr>
					  <tr>
					  <td>
					  <p style="text-align: left; font-size: 13px; font-family: Verdana,Geneva,sans-serif; color: #234c9f; margin: 0; line-height: 21px;">Puede reestablecer su contraseña a través del siguiente enlace:</p>
					  </td>
					  </tr>
					  <tr>
					  <td>
					  <div style="text-align: justify; font-size: 15px; padding: 5px; line-height: 18px; font-family: Verdana,Geneva,sans-serif; color: #7c7c7c;">
					  <div>
					  <p><a href="https://aula.escuelalacasitadevalentina.pe/#/authentication/recovery-password?token=%s&id=%s&email=%s">https://aula.escuelalacasitadevalentina.pe/#/authentication/recovery-password?token=%s&id=%s&email=%s</a></p>
					  </div>
					  </div>
					  </td>
					  </tr>
					  <tr>
					  <td>
					  <p style="text-align: left; font-size: 13px; font-family: Verdana,Geneva,sans-serif; color: #234c9f; margin: 0; line-height: 21px;">Saludos Atentamente.</p>
					  </td>
					  </tr>
					  </tbody>
					  </table>
					  <table border="0" width="600" cellspacing="0" cellpadding="0" align="center">
					  <tbody>
					  <tr style="list-style: none; color: #234c9f; font-family: Verdana,Geneva,sans-serif; font-size: 14px; text-align: center; padding: 0px;">
					  <td colspan="5" align="center" height="40"><a target="_blank" rel="noopener"><img src="https://imageshack.com/i/pmxyhgVHp" alt="IHAMH" border="0" /></a></td>
					  </tr>
					  <tr style="list-style: none; color: #234c9f; font-family: Verdana,Geneva,sans-serif; font-size: 14px; text-align: center; padding: 0px;">
					  <td colspan="5" align="center" height="40"><span style="font-family: Verdana,Geneva,sans-serif; text-align: center; font-size: 12px; letter-spacing: 12px; color: #9d9797;"><a href="https://pag.escuelalacasitadevalentina.com/" target="_blank" rel="noopener">www.escuelalacasitadevalentina.com</a></span></td>
					  </tr>
					  </tbody>
					  </table>
					  <hr />
					  <div><span style="color: #555555; font-family: Helvetica, sans-serif; font-size: xx-small;">Este correo fue enviado por <strong>IAMH</strong></span></div>
					  <div><span style="color: #555555; font-family: Helvetica, sans-serif; font-size: xx-small;"><a href="https://pag.escuelalacasitadevalentina.com/" target="_blank" rel="noopener">www.escuelalacasitadevalentina.com</a><br /> </span></div>
					  <img style="display: none!important; max-height: 0; width: 0; line-height: 0;" alt="" width="0" height="0" border="0" /></div>', $token, $row['id'],$row['email'], $token, $row['id'],$row['email']);
				//call multi_attach_mail() function and pass the required arguments

				//$send_email = multi_attach_mail($to,$subject,$htmlContent,$from,$from_name);
				$send_email = envio_correo($to,$subject,$htmlContent,$from,$from_name, $usuario);
				$send_email?true:false;
				if ($send_email==true) {
					$response_json['message']="<h4>El correo se ha Enviado Exitosamente al Destinatario $usuario </h4>";
					$response_json['success']=true;
				}else{
					$response_json['message']="<h4>El Envio del Correo ha Fallado Consulte con Soporte Tecnico.</h4>";
					$response_json['success']=false;
				}
			}


			$response = $response_json;  
		break;
        case 'validarToken':
			if(isset($data->token) && (!empty($data->token))){   
                
                $sql=$OSignin->validarToken();
                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('s', $data->token))
                    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();
                $row = $result->fetch_assoc();

                $response_json['auth']=($result->num_rows==1); 
                if($response_json['auth']){
                    $response_json['success']=true;
                    $response_json['rows']=$row['isValid'];            
                }    
                $response_json['messages']=(!$response_json['auth'])?"Los datos de acceso no coinciden en el sistema":"";
            }
        break;
        case 'guardarAccesoDevice':

            $sql=$OSignin->guardarAccesoDispositivo();
            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('sssssssssi',$data->browser,$data->browser_version,$data->device,$data->deviceType,$data->orientation,$data->os,$data->os_version,$data->userAgent,$data->dispositivo,$data->id_cliente))
				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 en el registro de pago";
           
		break;
	}
    echo json_encode($response_json);
}catch(Exception $e){
	echo $e->getOutMsg();
}
?> 