<?php 

require_once "conexion.php";

class ModeloUsuarios {

    static public function MdlMostrarUsuarios($tabla, $item, $valor){

        if($item != null){

            $stmt = Conexion:: conectar()->prepare("SELECT u.*, ro.nombre, ro.id as rol_id FROM $tabla u INNER JOIN usuario_rol r ON u.id_usuario = r.usuario_id INNER JOIN rol ro ON r.rol_id = ro.id WHERE u.$item = :$item");

            $stmt -> bindParam(":".$item, $valor, PDO::PARAM_STR);
            
            $stmt -> execute();

            return $stmt -> fetch();

        }else {

            $stmt = Conexion:: conectar()->prepare("SELECT * FROM $tabla");
            
            $stmt -> execute();

            return $stmt -> fetchAll();
        }

        $stmt -> close();

        $stmt = null;
    }


    static public function MdlMostrarUsuarios2($tabla, $item, $valor){

        if($item != null){

            $stmt = Conexion:: conectar()->prepare("SELECT * FROM $tabla WHERE $item = :$item");

            $stmt -> bindParam(":".$item, $valor, PDO::PARAM_STR);
            
            $stmt -> execute();

            return $stmt -> fetch();

        }else {

            $stmt = Conexion:: conectar()->prepare("SELECT u.*, e.nombre FROM $tabla u INNER JOIN empleado e ON u.id_empleado = e.id WHERE u.estado=1");
            
            $stmt -> execute();

            return $stmt -> fetchAll();
        }

        $stmt -> close();

        $stmt = null;
    }

	static public function MdlMostrarUsuarios1($tabla, $item, $valor){

        if($item != null){

            $stmt = Conexion:: conectar()->prepare("SELECT r.id, r.nombre FROM $tabla ur INNER JOIN rol r ON ur.rol_id = r.id WHERE ur.$item = :$item ");

            $stmt -> bindParam(":".$item, $valor, PDO::PARAM_STR);
            
            $stmt -> execute();

            return $stmt -> fetch();

        }else {

            $stmt = Conexion:: conectar()->prepare("SELECT * FROM $tabla");
            
            $stmt -> execute();

            return $stmt -> fetchAll();
        }

        $stmt -> close();

        $stmt = null;
    }

    /** Registro de usuarios */

  static public function mdlIngresarUsuario($tabla, $datos){

    $db = Conexion::conectar(); 

    $stmt = $db->prepare("INSERT INTO $tabla (id_empleado, usuario, password, foto, estado, id_area) 
                          VALUES (:id_empleado, :usuario, :password, :foto, :estado, :id_area)");

    $stmt->bindParam(":id_empleado", $datos["id_empleado"], PDO::PARAM_INT);
    $stmt->bindParam(":usuario", $datos["usuario"], PDO::PARAM_STR);
    $stmt->bindParam(":password", $datos["password"], PDO::PARAM_STR);
    $stmt->bindParam(":foto", $datos["foto"], PDO::PARAM_STR);
    $stmt->bindParam(":estado", $datos["estado"], PDO::PARAM_STR);
    $stmt->bindParam(":id_area", $datos["id_area"], PDO::PARAM_INT);

    if($stmt->execute()){
        $idUsuario = $db->lastInsertId(); 
        $stmt = null;
        return $idUsuario;
    } else {
        $stmt = null;
        return false;
    }

    }

     // Insertar relación usuario-rol
    static public function mdlInsertarUsuarioRol($tabla, $datos){
        $stmt = Conexion::conectar()->prepare("INSERT INTO $tabla (usuario_id, rol_id) VALUES (:usuario_id, :rol_id)");
        $stmt->bindParam(":usuario_id", $datos["usuario_id"], PDO::PARAM_INT);
        $stmt->bindParam(":rol_id", $datos["rol_id"], PDO::PARAM_INT);

        return $stmt->execute() ? "ok" : "error";
        $stmt -> close();

        $stmt = null;
    }

/*=============================================
	EDITAR USUARIO
	=============================================*/
    static public function mdlEditarUsuario($tabla, $datos){

        $stmt = Conexion::conectar()->prepare("UPDATE $tabla SET password = :password, foto = :foto, id_area = :id_area WHERE usuario = :usuario");

		$stmt -> bindParam(":password", $datos["password"], PDO::PARAM_STR);
		$stmt -> bindParam(":foto", $datos["foto"], PDO::PARAM_STR);
		$stmt -> bindParam(":usuario", $datos["usuario"], PDO::PARAM_STR);
        $stmt->bindParam(":id_area", $datos["id_area"], PDO::PARAM_INT);

        $stm1 = Conexion::conectar()->prepare("UPDATE usuario_rol SET rol_id = :rol_id WHERE usuario_id = :usuario_id");

		$stm1 -> bindParam(":rol_id", $datos["rol_id"], PDO::PARAM_INT);
		$stm1 -> bindParam(":usuario_id", $datos["usuario_id"], PDO::PARAM_INT);

        $stm1 -> execute();

		if($stmt -> execute()){

			return "ok";
            
		
		}else{

			return "error";	

		}

		$stmt -> close();

		$stmt = null;

    }
    
	/*=============================================
	ACTUALIZAR USUARIO
	=============================================*/

	static public function mdlActualizarUsuario($tabla, $item1, $valor1, $item2, $valor2){

		$stmt = Conexion::conectar()->prepare("UPDATE $tabla SET $item1 = :$item1 WHERE $item2 = :$item2");

		$stmt -> bindParam(":".$item1, $valor1, PDO::PARAM_STR);
		$stmt -> bindParam(":".$item2, $valor2, PDO::PARAM_STR);

		if($stmt -> execute()){

			return "ok";
		
		}else{

			return "error";	

		}

		$stmt -> close();

		$stmt = null;

	}
    /*=============================================
	BORRAR USUARIO
	=============================================*/

	static public function mdlBorrarUsuario($tabla, $datos){
        $estado1 = "inactivo";

		$stmt = Conexion::conectar()->prepare("UPDATE $tabla SET estado = :estado WHERE id_usuario = :id_usuario");

		$stmt->bindParam(":estado", $estado1, PDO::PARAM_STR);
        $stmt->bindParam(":id_usuario", $datos, PDO::PARAM_INT);

        if($stmt->execute()){
            return "ok";
        } else {
            return "error";
        }

        $stmt = null;



	}

    static public function mdlObtenerPermisos($idUsuario) {

        $stmt = Conexion::conectar()->prepare("SELECT DISTINCT m.nombre AS modulo, a.nombre AS accion 
            FROM usuario_rol ur
            INNER JOIN rol_permiso rp ON ur.rol_id = rp.rol_id
            INNER JOIN permiso p ON rp.permiso_id = p.id
            INNER JOIN modulo m ON p.modulo_id = m.id
            INNER JOIN accion a ON p.accion_id = a.id
            WHERE ur.usuario_id = :id_usuario 
            AND rp.activo = 1 
            AND m.activo = 1 
            AND a.activo = 1");

        $stmt->bindParam(":id_usuario", $idUsuario, PDO::PARAM_INT);
        $stmt->execute();

        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

}