<?php
// Iniciar sesión solo si no está activa ya
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

class Sesion {
    public $id;
    public $priv;
    public $usuario;

    // Constructor PHP 8 compatible
    public function __construct($id = NULL, $priv = -1, $usuario = NULL) {
        $this->id      = $id;
        $this->priv    = $priv;
        $this->usuario = $usuario;
    }

    /* Crea/guarda la sesión */
    public function setSesion() {
        $_SESSION['usuario'] = $this->id . "|" . $this->priv . "|" . $this->usuario;
        $_SESSION['id']      = $this->id;
        $_SESSION['rango']   = $this->priv;
        $_SESSION['nombre_usr'] = $this->usuario;
        return isset($_SESSION['usuario']) ? 1 : 0;
    }

    /* Llena los atributos del objeto desde la sesión activa */
    public function setDatos($id, $priv, $usr) {
        if (isset($_SESSION['usuario'])) {
            $this->id      = $id;
            $this->priv    = $priv;
            $this->usuario = $usr;
            return 1;
        }
        return 0;
    }

    /* Valida si hay sesión activa con el privilegio requerido
       @param perms: string con privilegios permitidos separados por ','
    */
    public function isValida($perms) {
        if (!isset($_SESSION['usuario'])) {
            return 0;
        }
        $datos    = explode("|", $_SESSION['usuario']);
        $permisos = explode(",", $perms);
        foreach ($permisos as $permiso) {
            if (isset($datos[1]) && $datos[1] == $permiso) {
                return 1;
            }
        }
        return 0;
    }

    /* Destruye la sesión */
    public function goodBye() {
        $_SESSION = [];
        if (ini_get("session.use_cookies")) {
            $params = session_get_cookie_params();
            setcookie(session_name(), '', time() - 42000,
                $params["path"], $params["domain"],
                $params["secure"], $params["httponly"]
            );
        }
        session_destroy();
    }
}
?>
