$_ENV['DB_HOST'] ?? 'localhost', 'port' => $_ENV['DB_PORT'] ?? '3306', 'database' => $database, 'user' => $_ENV['DB_EMPRESA_USER'] ?? $_ENV['DB_USER'] ?? 'root', 'password' => $_ENV['DB_EMPRESA_PASSWORD'] ?? $_ENV['DB_PASSWORD'] ?? '', 'charset' => $_ENV['DB_CHARSET'] ?? 'utf8mb4' ]; } /** * Obtiene configuración de base de datos master */ public static function getMasterDatabaseConfig() { return [ 'host' => $_ENV['DB_MASTER_HOST'] ?? $_ENV['DB_HOST'] ?? 'localhost', 'port' => $_ENV['DB_PORT'] ?? '3306', 'database' => $_ENV['DB_MASTER_DATABASE'] ?? 'avantikads_nmgen', 'user' => $_ENV['DB_MASTER_USER'] ?? $_ENV['DB_USER'] ?? 'root', 'password' => $_ENV['DB_MASTER_PASSWORD'] ?? $_ENV['DB_PASSWORD'] ?? '', 'charset' => $_ENV['DB_CHARSET'] ?? 'utf8mb4' ]; } /** * Valida que exista la base de datos para una empresa */ public static function validateDatabaseExists($database) { try { // Usar las mismas credenciales que la base master $host = $_ENV['DB_MASTER_HOST'] ?? $_ENV['DB_HOST'] ?? 'localhost'; $user = $_ENV['DB_MASTER_USER'] ?? $_ENV['DB_EMPRESA_USER'] ?? 'root'; $password = $_ENV['DB_MASTER_PASSWORD'] ?? $_ENV['DB_EMPRESA_PASSWORD'] ?? ''; $mysqli = new mysqli($host, $user, $password); if ($mysqli->connect_error) { return false; } $result = $mysqli->query("SHOW DATABASES LIKE '$database'"); $exists = $result->num_rows > 0; $mysqli->close(); return $exists; } catch (Exception $e) { error_log("Error validando BD $database: " . $e->getMessage()); return false; } } /** * Obtiene empresaId del usuario actual desde base de datos master */ public static function getEmpresaIdByUserId($userId) { $masterConfig = self::getMasterDatabaseConfig(); try { $mysqli = new mysqli( $masterConfig['host'], $masterConfig['user'], $masterConfig['password'], $masterConfig['database'] ); if ($mysqli->connect_error) { throw new Exception("Error conexión master DB: " . $mysqli->connect_error); } $stmt = $mysqli->prepare("SELECT empresaId FROM usuario WHERE usuarioId = ? LIMIT 1"); $stmt->bind_param("i", $userId); $stmt->execute(); $result = $stmt->get_result(); if ($row = $result->fetch_assoc()) { return (int)$row['empresaId']; } return null; } catch (Exception $e) { error_log("Error obteniendo empresaId: " . $e->getMessage()); return null; } } /** * Obtiene configuración general del sistema */ public static function getSystemConfig() { return [ 'doc_root' => $_ENV['DOC_ROOT'] ?? '/var/www/html/ventas', 'web_root' => $_ENV['WEB_ROOT'] ?? 'http://localhost', 'smtp_host' => $_ENV['SMTP_HOST'] ?? '', 'smtp_user' => $_ENV['SMTP_USER'] ?? '', 'smtp_port' => $_ENV['SMTP_PORT'] ?? '587', 'items_per_page' => $_ENV['ITEMS_PER_PAGE'] ?? '20', 'min_year' => $_ENV['MIN_YEAR'] ?? '2025', 'max_year' => $_ENV['MAX_YEAR'] ?? '2030', 'debug_mode' => $_ENV['DEBUG_MODE'] ?? 'false', 'iva_rate' => $_ENV['IVA_RATE'] ?? '0.16', 'isr_rate' => $_ENV['ISR_RATE'] ?? '0.10' ]; } /** * Obtiene valor específico del entorno */ public static function get($key, $default = null) { return $_ENV[$key] ?? $default; } } // Auto-cargar configuración si no está cargada if (!isset($_ENV['DB_HOST'])) { try { Config::loadEnv(dirname(__DIR__) . '/.env'); } catch (Exception $e) { error_log("Error cargando configuración: " . $e->getMessage()); } } ?>