<?php
header("Content-Type: text/html;charset=utf-8");
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

require_once("../data/Conexion.php");
require_once("../data/Tablas.php");
require_once("../clases/cls_usuario.php");

function save_img_file($directory, $namefile, $base64Image){
	$decodedImage = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $base64Image));
	//$decodedImage = base64_decode($base64Image);
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mimeType = finfo_buffer($finfo, $decodedImage);
    finfo_close($finfo);
    $mimeToExt = [
        'image/jpeg' => 'jpg',
        'image/jpg' => 'jpg',
        'image/png' => 'png',
        'image/gif' => 'gif',
        'image/bmp' => 'bmp',
        'image/tiff' => 'tiff',
        'image/tif' => 'tif',
        'image/webp' => 'webp',
        'image/svg+xml' => 'svg',
        'image/x-raw' => 'raw',
        'image/x-canon-cr2' => 'cr2',
        'image/x-nikon-nef' => 'nef',
        'image/x-adobe-dng' => 'dng',
        'image/x-icon' => 'ico',
        'image/heif' => 'heif',
        'image/heic' => 'heic',
        'image/x-portable-bitmap' => 'pbm',
        'image/x-portable-graymap' => 'pgm',
        'image/x-portable-pixmap' => 'ppm',
        'image/x-xpixmap' => 'xpm',
        'image/x-xbitmap' => 'xbm',
        'image/avif' => 'avif'
    ];
    if (array_key_exists($mimeType, $mimeToExt)) {
        $extension = $mimeToExt[$mimeType];
        $fullFilename = $namefile . '.' . $extension;
        if (!is_dir($directory)){
			mkdir($directory, 0777, true);
		}
        file_put_contents($directory . $fullFilename, $decodedImage);
		return $fullFilename;
    } else {
		return $namefile;
    }
}


if (isset($_POST["accion"])){
    if ($_POST["accion"] == "lista"){
		$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
		if (isset($_POST["buscar"]) && isset($_POST["orden"]) && isset($_POST["filtro_estados"])){
			$items_pagina = 0;
			$items_cantidad = 0;
			$buscar = $_POST["buscar"];
			$nombres = "";
			$ordendireccion = $_POST["orden"];
			$estados = $_POST["filtro_estados"];
			$tipos = "Todos";
			if (isset($_POST["items_pagina"])){
				$items_pagina = $_POST["items_pagina"];
			}
			if (isset($_POST["items_cantidad"])){
				$items_cantidad = $_POST["items_cantidad"];
			}
			if (isset($_POST["filtro_tipos"])){
				$tipos = $_POST["filtro_tipos"];
			}
			if (isset($_POST["nombres"])){
				$nombres = $_POST["nombres"];
			}
			$datos = cls_Group_Usuario::EstadosTipos($buscar, $nombres, $estados, $tipos, $ordendireccion);
			$datos->cargar_datos($items_pagina, $items_cantidad);
			$lista = array();
			for ($idx=0; $idx<$datos->get_cantidad_cargados(); $idx++){
				array_push($lista, array(
					"usuario_id"=>$datos->get_usuario_id($idx),
					"tipo"=>$datos->get_tipo($idx),
					"usuario"=>$datos->get_usuario($idx),
					//"password"=>$datos->get_password($idx),
					"foto"=>$datos->get_foto($idx),
					"nombres"=>$datos->get_nombres($idx),
					"documento_tipo"=>$datos->get_documento_tipo($idx),
					"documento_numero"=>$datos->get_documento_numero($idx),
					"telefono"=>$datos->get_telefono($idx),
					"correo"=>$datos->get_correo($idx),
					"direccion"=>$datos->get_direccion($idx),
					"tienda_id"=>$datos->get_tienda_id($idx),
					"estado_actividad"=>$datos->get_estado_actividad($idx),
					"permisos"=>$datos->get_permisos($idx),
					"fecha_modificacion"=>$datos->get_fecha_modificacion($idx),
				));
			}
			$respuestas["datos"] = $lista;
			$respuestas["estado"]  = "ok";
			$respuestas["mensaje"]  = "Los datos se cargaron correctamente";
		} else {
			$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
		}
		echo(json_encode($respuestas));
	} else if ($_POST["accion"] == "datos"){
		$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
		if (isset($_POST["buscar"])){
			$codigo = $_POST["buscar"];
			$datos = cls_Usuario::Indice($codigo);
			$respuestas["datos"] = array(
				"usuario_id"=>$datos->get_usuario_id(),
				"tipo"=>$datos->get_tipo(),
				"usuario"=>$datos->get_usuario(),
				//"password"=>$datos->get_password(),
				"foto"=>$datos->get_foto(),
				"nombres"=>$datos->get_nombres(),
				"documento_tipo"=>$datos->get_documento_tipo(),
				"documento_numero"=>$datos->get_documento_numero(),
				"telefono"=>$datos->get_telefono(),
				"correo"=>$datos->get_correo(),
				"direccion"=>$datos->get_direccion(),
				"tienda_id"=>$datos->get_tienda_id(),
				"estado_actividad"=>$datos->get_estado_actividad(),
				"permisos"=>$datos->get_permisos(),
				"fecha_modificacion"=>$datos->get_fecha_modificacion(),
			);
			$respuestas["estado"]  = "ok";
			$respuestas["mensaje"]  = "Los datos se cargaron correctamente";
		} else {
			$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
		}
		echo(json_encode($respuestas));
    } else if ($_POST["accion"] == "registrar"){
		$respuestas = array("estado"=>"error", "mensaje"=>"", "codigo"=>0, "foto"=>"");
		$usuario_editor = 0;
		$codigo = 0;
		$activo = true;
		$cambiar_contrasena = false;
		if (isset($_SESSION["usuario_editor"])){
			$usuario_editor = $_SESSION["usuario_editor"];
		}
		if (isset($_POST["txt_codigo"])){
			$codigo = $_POST["txt_codigo"];
		}
		if (isset($_POST["activo"])){
			$activo = $_POST["activo"];
		}
		if (isset($_POST["chk_cambiar_contrasena"])){
			$cambiar_contrasena = $_POST["chk_cambiar_contrasena"];
		}
		$tipo = $_POST["txt_tipo"];
		$usuario = $_POST["txt_usuario"];
		$password1 = $_POST["txt_contrasena_1"];
		$password2 = $_POST["txt_contrasena_2"];
		$foto_archivo = $_POST["txt_foto"];
		$nombres = $_POST["txt_nombres"];
		$documento_tipo = $_POST["txt_documento_tipo"];
		$documento_numero = $_POST["txt_documento_numero"];
		$telefono = $_POST["txt_telefono"];
		$correo = $_POST["txt_correo"];
		$direccion = $_POST["txt_residencia"];
		$tienda_id = $_POST["txt_tienda"];
		$estado_actividad = $_POST["txt_estado"];
		$permisos = $_POST["permisos"];
		$registrar = true;
		$datos = cls_Usuario::Indice($codigo);
		if ($registrar === true && $datos->get_usuario_id() == 0){
			$usuarios = cls_Group_Usuario::Usuario($usuario);
			$usuarios->cargar_datos(0, 0);
			if ($usuarios->get_cantidad() > 0){
				$registrar = false;
				$respuestas["mensaje"]  = "El nombre de usuario ingresado ya se encuentra en uso.";
			}
		}
		if ($registrar === true && ($cambiar_contrasena === true || $cambiar_contrasena == "true" || $codigo <= 0)){
			if (trim($usuario) == ""){
				$registrar = false;
				$respuestas["mensaje"]  = "Ingrese el nombre usuario";
			} else if (trim($password1) == ""){
				$registrar = false;
				$respuestas["mensaje"]  = "Ingrese la contraseña";
			} else if (trim($password2) == ""){
				$registrar = false;
				$respuestas["mensaje"]  = "Ingrese nuevamente la contraseña";
			}else if ($password1 != $password2){
				$registrar = false;
				$respuestas["mensaje"]  = "Las contraseñas ingresadas no son iguales";
			}
			$hash = password_hash($password1, PASSWORD_BCRYPT);
			$datos->set_password($hash);
			if ($codigo <= 0){
				$datos->set_usuario($usuario);
			}
		}
		if ($registrar === true && $datos->get_usuario_id() > 0 && $datos->get_tipo() == "Administrador" && $tipo != "Administrador"){
			$usuarios = cls_Group_Usuario::EstadosTipos("", "","Todos","Administrador");
			$usuarios->cargar_datos(0, 0);
			if ($usuarios->get_cantidad() <= 1){
				$registrar = false;
				$respuestas["mensaje"]  = "No se puede cambiar el tipo de usuario, se debe de asignar otro Administrador para continuar";
			}
		}
		if ($registrar === true){
			$foto = "";
			$registrar_foto = true;
			if ($datos->get_usuario_id() > 0 && $foto_archivo != "" && $datos->get_foto() != $foto_archivo){
				$registrar_foto = false;
				$foto = save_img_file("../libreria/imagenes/usuario/", "user_".$datos->get_usuario_id(), $foto_archivo);
				$datos->set_foto($foto);
			}
			$datos->set_tipo($tipo);
			$datos->set_nombres($nombres);
			$datos->set_documento_tipo($documento_tipo);
			$datos->set_documento_numero($documento_numero);
			$datos->set_telefono($telefono);
			$datos->set_correo($correo);
			$datos->set_direccion($direccion);
			$datos->set_tienda_id($tienda_id);
			$datos->set_estado_actividad($estado_actividad);
			$datos->set_permisos($permisos);
			$datos->set_activo($activo);
			if ($datos->registrar($usuario_editor)){
				$respuestas["codigo"] = $datos->get_usuario_id();
				if ($registrar_foto && $foto_archivo != "" && $datos->get_foto() != $foto_archivo){
					$foto = save_img_file("../libreria/imagenes/usuario/", "user_".$datos->get_usuario_id(), $foto_archivo);
					$datos->set_foto($foto);
					$datos->registrar($usuario_editor);
				}
				$respuestas["foto"]  = $datos->get_foto();
				$respuestas["estado"]  = "ok";
				$respuestas["mensaje"]  = "Los datos se cargaron correctamente";
			} else {
				$respuestas["mensaje"]  = "Ocurrió un error registrando los datos.";
			}
		}
		echo(json_encode($respuestas));
    } else if ($_POST["accion"] == "eliminar"){
		$respuestas = array("estado"=>"error", "mensaje"=>"");
		if (isset($_POST["buscar"])){
			$usuario_editor = 0;
			if (isset($_SESSION["usuario_editor"])){
				$usuario_editor = $_SESSION["usuario_editor"];
			}
			$eliminar = true;
			$codigo = $_POST["buscar"];
			$datos = cls_Usuario::Indice($codigo);
			if ($datos->get_usuario_id() > 0 && $datos->get_tipo() == "Administrador"){
				$usuarios = cls_Group_Usuario::EstadosTipos("", "","Todos","Administrador");
				$usuarios->cargar_datos(0, 0);
				if ($usuarios->get_cantidad() <= 1){
					$eliminar = false;
					$respuestas["mensaje"]  = "No se puede eliminar la cuenta de usuario, se debe de asignar otro Administrador para continuar";
				}
			}
			if ($eliminar === true){
				if ($datos->eliminar($usuario_editor)){
					$respuestas["estado"]  = "ok";
					$respuestas["mensaje"]  = "Los datos se eliminaron correctamente";
				} else {
					$respuestas["mensaje"]  = "No se pudo eliminar los datos correctamente";
				}
			}
		} else {
			$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
		}
		echo(json_encode($respuestas));
	}
}
?>
