<?php
require_once("vendor/autoload.php");

use \CloudConvert\CloudConvert;
use \CloudConvert\Models\Job;
use \CloudConvert\Models\Task;

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 , X-Requested-With');
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();
	$OVideo = new GVideo();

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

    $response = "";

	function obtenerUrlVideoAnterior($idVideo) {
		$OConex = new GConector();
		$init_stmt=$OConex->stmt_init();
		$OVideo = new GVideo();

		$sql=$OVideo->obtenerUrlVideo();
		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', $idVideo))
			throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);

		$init_stmt->execute();
		// Obtiene el resultado
		$result = $init_stmt->get_result();
		// Extrae la fila
		$row = $result->fetch_assoc();
		// Retorna el valor de la columna 'urlVideo'
		return ($row) ? $row['urlVideo'] : null;
	}

	function obtenerUrlDocumentoAnterior($idVideo) {
		$OConex = new GConector();
		$init_stmt=$OConex->stmt_init();
		$OVideo = new GVideo();

		$sql=$OVideo->obtenerUrlDocumento();
		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', $idVideo))
			throw new GException("Vaya! ocurrio un problema en el sistema.<br/>Consulte con el Soporte Tecnico", $OConex->error, $OConex->errno);

		$init_stmt->execute();
		// Obtiene el resultado
		$result = $init_stmt->get_result();
		// Extrae la fila
		$row = $result->fetch_assoc();
		// Retorna el valor de la columna 'urlDocumento'
		return ($row) ? $row['urlDocumento'] : null;
	}

	function eliminarVideoDelServidor($urlVideo) {
		    // Directorio donde se encuentra el video (ajusta esto según tu estructura de archivos)
			$directorioVideos = getcwd() . "/videos/";

			// Ruta completa del video
			$rutaCompletaVideo = $directorioVideos . $urlVideo;
		
			// Verifica si el archivo existe antes de intentar eliminarlo
			if (file_exists($rutaCompletaVideo)) {
				// Intenta eliminar el archivo
				if (unlink($rutaCompletaVideo)) {
					// Éxito al eliminar el archivo
				} else {
					// Error al eliminar el archivo
				}
			} else {
				// El archivo no existe
			}
	}

	switch($_GET['oper']){
		case 'listar':
			$sql=$OVideo->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);	
			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 'listarVideoId':
			$sql=$OVideo->listaVideoId();
			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))
				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 'listarVideoTallerId':
			$sql=$OVideo->listaVideoTallerId();
			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))
				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':
			//Fin guardar foto
			if(empty($data->id)){
				$sql=$OVideo->guardar();
			}else{
				$previousVideoUrl = obtenerUrlVideoAnterior($data->id);
				// Comparar la URL anterior con la nueva URL
				if (!empty($previousVideoUrl) && $previousVideoUrl != $data->urlVideo) {
					// Eliminar el video anterior del servidor
					eliminarVideoDelServidor($previousVideoUrl);
				}

				$previousDocumentoUrl = obtenerUrlDocumentoAnterior($data->id);
				// Comparar la URL anterior con la nueva URL
				if (!empty($previousDocumentoUrl) && $previousDocumentoUrl != $data->urlDocumento) {
					// Eliminar el video anterior del servidor
					eliminarVideoDelServidor($previousDocumentoUrl);
				}

				$sql=$OVideo->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('sissi', $data->noVideo,$data->idCursoClase,$data->urlVideo,$data->urlDocumento,$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 en el registro Departamento";
           	$response = true; 
		break;
		case 'subirYConvertirImagen':
			if (isset($_FILES['image'])) {
				$cloudconvert = new CloudConvert([
					'api_key' => 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIxIiwianRpIjoiZDg2YzA1YTFmNGNhMzY3ZTE3MTQ1NWU0NWE1ODczOTVkYmRkNTJjMDc3YWRmZTQ2MjNmZThjNWI4NDcyMDI3MGNjOTRhYTA3OGQ3MDJjNjkiLCJpYXQiOjE3MjU5Mzg4ODkuNzk5NDA4LCJuYmYiOjE3MjU5Mzg4ODkuNzk5NDA5LCJleHAiOjQ4ODE2MTI0ODkuNzkzODQ2LCJzdWIiOiI2NTM2NDA0NyIsInNjb3BlcyI6WyJ1c2VyLnJlYWQiLCJ1c2VyLndyaXRlIiwidGFzay5yZWFkIiwidGFzay53cml0ZSIsIndlYmhvb2sucmVhZCIsIndlYmhvb2sud3JpdGUiLCJwcmVzZXQucmVhZCIsInByZXNldC53cml0ZSJdfQ.K4yFfVixYjGj_Dyq7SzG8o3L7SNj35gRcXW_Q3RY_G5wESRVjMyvtRm1DFqAM9XzfvJe3I6e8bSJU7-fp-RvdwjNtMJYV_xMzhA-uIvkFwXRhvXdOeUY2j8l1rM-qvT_pIxNvvclkPIViQkLkhsVFK--EKXna5pW1VaWsYAts530HzsT-FSJZ4RbaE07N6uOqtZ_ftuYhJJtqbHSToJRX4_pgwGyoqS7a1br1ye9rvwEQfpPkedSAlsg81WQk0qx1YAyREzPLDgVf4jXuA3-2yXvwJJOafwN1Nxr3kHDkwA4eIBWXhyvRypWrpUEC9zQorqOPUBa356cRoakdgbctOSb_plTUlGNObTHKYZzfdYBAgrWGSGsqp-b1C6FSwzAPi7_SDwsWYAKeHPP1dtaECaH67gqSqpnoHH5SeDDGDO7FVjbLkAh2tRER4nTCuGGaeU4rYsSy1UW4lKn2WUNOQihLzVYqb4k1jgCA_7FPVk8EUCJES6fUJSaJYFY35Up9apem74E1rkJIj5mmB5K_h4jDJKs8T7g8ilPyWd6JvlzO8nrWow1JD2GwfEGM3KPImxjmmEWX2ygOBVk1R1biqFK7AD9LYd6-3PL-d2Sl94S1edu5XZEIlof10u6IITmbX6dgz2Q-V3PYY2sz1KueUObpIFqH3P7nlIYX6qaMVc'
				]);
		
				$job = (new Job())
					->addTask(
						(new Task('import/upload', 'subir_archivo'))
							->set('file', $_FILES['image']['name'])
					)
					->addTask(
						(new Task('convert', 'convertir_archivo'))
							->set('input', ['subir_archivo'])
							->set('output_format', 'mp4')
					)				
					->addTask(
						(new Task('export/url', 'exportar_url'))
						  ->set('input', ["convertir_archivo"])
					);
		
					$job = $cloudconvert->jobs()->create($job);

					$uploadTask = $job->getTasks()->whereName('subir_archivo')[0];
	
					$cloudconvert->tasks()->upload($uploadTask, fopen($_FILES['image']['tmp_name'], 'r'), $_FILES['image']['name']);
	
					$cloudconvert->jobs()->wait($job);
		
				if ($job->getStatus() == 'finished') {
					$response = "Video subido y convertido correctamente";
					$jobId = $job->getId(); // Obtener el ID del trabajo
					$response_json['id'] = $jobId;
					$response = $response_json['id'];
				} else {
					$response = "Error al subir o convertir el archivo.";
				}
			}
		break;
		case 'descargarImagenConvertida':
			if (isset($data->jobId)) {
				$jobId = $data->jobId;
				$cloudconvert = new CloudConvert([
					'api_key' => 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIxIiwianRpIjoiZDg2YzA1YTFmNGNhMzY3ZTE3MTQ1NWU0NWE1ODczOTVkYmRkNTJjMDc3YWRmZTQ2MjNmZThjNWI4NDcyMDI3MGNjOTRhYTA3OGQ3MDJjNjkiLCJpYXQiOjE3MjU5Mzg4ODkuNzk5NDA4LCJuYmYiOjE3MjU5Mzg4ODkuNzk5NDA5LCJleHAiOjQ4ODE2MTI0ODkuNzkzODQ2LCJzdWIiOiI2NTM2NDA0NyIsInNjb3BlcyI6WyJ1c2VyLnJlYWQiLCJ1c2VyLndyaXRlIiwidGFzay5yZWFkIiwidGFzay53cml0ZSIsIndlYmhvb2sucmVhZCIsIndlYmhvb2sud3JpdGUiLCJwcmVzZXQucmVhZCIsInByZXNldC53cml0ZSJdfQ.K4yFfVixYjGj_Dyq7SzG8o3L7SNj35gRcXW_Q3RY_G5wESRVjMyvtRm1DFqAM9XzfvJe3I6e8bSJU7-fp-RvdwjNtMJYV_xMzhA-uIvkFwXRhvXdOeUY2j8l1rM-qvT_pIxNvvclkPIViQkLkhsVFK--EKXna5pW1VaWsYAts530HzsT-FSJZ4RbaE07N6uOqtZ_ftuYhJJtqbHSToJRX4_pgwGyoqS7a1br1ye9rvwEQfpPkedSAlsg81WQk0qx1YAyREzPLDgVf4jXuA3-2yXvwJJOafwN1Nxr3kHDkwA4eIBWXhyvRypWrpUEC9zQorqOPUBa356cRoakdgbctOSb_plTUlGNObTHKYZzfdYBAgrWGSGsqp-b1C6FSwzAPi7_SDwsWYAKeHPP1dtaECaH67gqSqpnoHH5SeDDGDO7FVjbLkAh2tRER4nTCuGGaeU4rYsSy1UW4lKn2WUNOQihLzVYqb4k1jgCA_7FPVk8EUCJES6fUJSaJYFY35Up9apem74E1rkJIj5mmB5K_h4jDJKs8T7g8ilPyWd6JvlzO8nrWow1JD2GwfEGM3KPImxjmmEWX2ygOBVk1R1biqFK7AD9LYd6-3PL-d2Sl94S1edu5XZEIlof10u6IITmbX6dgz2Q-V3PYY2sz1KueUObpIFqH3P7nlIYX6qaMVc'
				]);

				// Buscar el trabajo por jobId
				$job = $cloudconvert->jobs()->get($jobId);

				if ($job->getStatus() == 'finished') {
					foreach ($job->getExportUrls() as $file) {
						$source = $cloudconvert->getHttpTransport()->download($file->url)->detach();
						$dest = fopen(getcwd() . "/videos/" . strtoupper($file->filename), 'w');
						stream_copy_to_stream($source, $dest);
						$response = "Video (convertido) descargado correctamente";
					}
				} else {
					$response = "El trabajo no ha terminado o ocurrió un error al descargar el video convertido.";
				}
			} else {
				$response = "No se proporcionó un jobId válido.";
			}
		break;
		case 'eliminar':
			if(!isset($data) || empty($data))
				break;
			$sql=$OVideo->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 'listarCursoClase':
            $item=1; 
            $sql=$OVideo->listarCursoClase();
            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 'guardarVistaVideo':
			$sql=$OVideo->guardarVistaVideo();
	
			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('iiii', $data->idCurso, $data->idCursoClase, $data->id,$data->idCliente))
				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 Departamento";
           	$response = true; 
		break;
    }

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