let Database = require('better-sqlite3');

class WrappedDatabase {
  constructor(db) {
    this.db = db;
  }

  all(sql, params = []) {
    let stmt = this.db.prepare(sql);
    return stmt.all(...params);
  }

  first(sql, params = []) {
    let rows = this.all(sql, params);
    return rows.length === 0 ? null : rows[0];
  }

  exec(sql) {
    this.db.exec(sql);
  }

  mutate(sql, params = []) {
    let stmt = this.db.prepare(sql);
    let info = stmt.run(...params);
    return { changes: info.changes, insertId: info.lastInsertRowid };
  }

  transaction(fn) {
    return this.db.transaction(fn)();
  }

  close() {
    this.db.close();
  }
}

function openDatabase(filename) {
  return new WrappedDatabase(new Database(filename));
}

module.exports = { openDatabase };