<?php
date_default_timezone_set('America/Guayaquil');

class clsbdd {
    private $quien;
    private $adonde;
    private $endonde;
    private $conque;
    private $campos;
    private $valores;
    private $link = null; // Guardará la conexión activa

    public function carga_campos($campos) { $this->campos = $campos; }
    public function carga_valores($valores) { $this->valores = $valores; }

    private function adentro() { 
        // Si ya hay una conexión activa y funcional, la reutiliza
        if ($this->link !== null && $this->link->ping()) {
            return $this->link;
        }

        $ruta_config = dirname(__FILE__) . '/config.php';
        if (!file_exists($ruta_config)) {
            die("Error Crítico: No se encontró el archivo config.php");
        }

        include($ruta_config);

        $this->quien   = isset($user) ? $user : '';
        $this->adonde  = isset($db) ? $db : '';
        $this->endonde = isset($host) ? $host : '';
        $this->conque  = isset($password) ? $password : '';

        $this->link = new mysqli($this->endonde, $this->quien, $this->conque, $this->adonde);
        if ($this->link->connect_error) {
            die("Error de conexión: " . $this->link->connect_error);
        }

        $this->link->set_charset("utf8");
        return $this->link;
    }
    
    public function ejecutar_array($sql) {
        $mysqli = $this->adentro();
        $resultado = $mysqli->query($sql);
        $datos = [];
        if ($resultado) {
            while ($row = $resultado->fetch_assoc()) {
                $datos[] = $row;
            }
        }
        return $datos;
    }

    public function esc($str) {
        $mysqli = $this->adentro();
        if ($str === null) return '';
        return $mysqli->real_escape_string($str);
    }

    public function ejecutar($sql) {
        $mysqli = $this->adentro();
        $resultado = $mysqli->query($sql);
        if (!$resultado) {
            error_log("Error de MySQL en: " . $sql . " - Error: " . $mysqli->error);
        }
        return $resultado;
    }
    
    public function insertar($tabla) {
        $mysqli = $this->adentro();
        $sql = "INSERT INTO ". $tabla . " (" .$this->campos . ") VALUES (".$this->valores . ")";
        if($mysqli->query($sql)) {
            $id = $mysqli->insert_id;
            $this->campos = "";
            $this->valores = "";
            return $id;
        } else {
            error_log("Error SQL: " . $mysqli->error);
            return 0;
        }
    }

    public function actualizar($tabla) {
        $mysqli = $this->adentro();
        $sql = "UPDATE ". $tabla . " SET " . $this->campos . " WHERE ". $this->valores;
        $res = ($mysqli->query($sql)) ? 1 : 0;
        $this->campos = "";
        $this->valores = "";
        return $res;
    }

    public function ultimo_id() {
        $mysqli = $this->adentro();
        return $mysqli->insert_id; // Ahora sí obtiene el id de la conexión activa
    }

    // Cierra la conexión explícitamente al destruir la instancia de la clase
    public function __destruct() {
        if ($this->link !== null) {
            $this->link->close();
        }
    }
}
?>