const { Client } = require('pg');
const path = require('path');
require('dotenv').config({ path: path.join(__dirname, '../.env') });

const createDb = async () => {
    const dbName = process.env.DB_DATABASE || 'stsystem';
    
    // 连接到默认的 postgres 数据库
    const client = new Client({
        user: process.env.DB_USER,
        host: process.env.DB_HOST,
        database: 'postgres', // 连接到默认数据库
        password: process.env.DB_PASSWORD,
        port: process.env.DB_PORT,
    });

    try {
        await client.connect();
        console.log(`已连接到 postgres 数据库，正在检查 ${dbName} 是否存在...`);

        const res = await client.query(`SELECT 1 FROM pg_database WHERE datname = $1`, [dbName]);
        
        if (res.rows.length === 0) {
            console.log(`数据库 ${dbName} 不存在，正在创建...`);
            // CREATE DATABASE 不能在事务块中运行，也不能使用参数化查询
            await client.query(`CREATE DATABASE "${dbName}"`);
            console.log(`数据库 ${dbName} 创建成功！`);
        } else {
            console.log(`数据库 ${dbName} 已存在，跳过创建。`);
        }
    } catch (err) {
        console.error('创建数据库失败:', err);
        // 如果是因为 postgres 数据库不存在（极少见）或者密码错误，这里会报错
        // 但我们不应该阻塞后续流程，也许用户已经手动创建了 stsystem
        // 不过为了安全起见，如果这一步失败，通常意味着配置错误，还是退出比较好
        process.exit(1);
    } finally {
        await client.end();
    }
};

createDb();
