const { Pool } = require('pg');
require('dotenv').config(); // Carrega as variáveis de ambiente do arquivo .env

const pool = new Pool({
  user: process.env.DB_USER,
  host: process.env.DB_HOST,
  database: process.env.DB_NAME,
  password: process.env.DB_PASSWORD,
  port: process.env.DB_PORT,
});

// Testa a conexão
pool.connect((err, client, release) => {
  if (err) {
    return console.error('Erro ao adquirir cliente do pool de conexão:', err.stack);
  }
  client.query('SELECT NOW()', (err, result) => {
    release(); // Libera o cliente de volta para o pool
    if (err) {
      return console.error('Erro ao executar query de teste:', err.stack);
    }
    console.log('Conexão estabelecida com o PostgreSQL em:', result.rows[0].now);
  });
});

// Exporta métodos para interagir com o banco de dados
module.exports = {
  // Executa uma query SQL com parâmetros
  query: (text, params, callback) => {
    return pool.query(text, params, callback);
  },
  // Helper para buscar uma única linha (equivalente ao .get do sqlite3)
  get: (text, params, callback) => {
    pool.query(text, params, (err, res) => {
      if (err) {
        return callback(err);
      }
      callback(null, res.rows[0]);
    });
  },
  // Helper para buscar todas as linhas (equivalente ao .all do sqlite3)
  all: (text, params, callback) => {
    pool.query(text, params, (err, res) => {
      if (err) {
        return callback(err);
      }
      callback(null, res.rows);
    });
  },
  // Helper para operações de escrita (INSERT, UPDATE, DELETE - equivalente ao .run do sqlite3)
  run: (text, params, callback) => {
    pool.query(text, params, (err, res) => {
      if (err) {
        return callback(err);
      }
      // Para INSERT, você geralmente adiciona "RETURNING id_da_coluna" na sua query SQL
      // para obter o ID inserido no PostgreSQL. Aqui, res.rowCount indica o número de linhas afetadas.
      callback(null, { changes: res.rowCount, lastID: res.rows && res.rows.length > 0 ? res.rows[0].id : null }); // 'id' deve ser o nome da sua coluna PK se usar RETURNING
    });
  }
};