const SQLite = require('react-native-sqlite-storage');

class DatabaseDriverReactNative {

	constructor() {
		this.lastInsertId_ = null;
	}

	open(options) {
		//SQLite.DEBUG(true);
		return new Promise((resolve, reject) => {
			SQLite.openDatabase({ name: options.name }, (db) => {
				this.db_ = db;
				resolve();
			}, (error) => {
				reject(error);
			});
		});
	}

	sqliteErrorToJsError(error, sql = null, params = null) {
		return error;
	}

	setDebugMode(v) {
		//SQLite.DEBUG(v);
	}

	selectOne(sql, params = null) {
		return new Promise((resolve, reject) => {
			this.db_.executeSql(sql, params, (r) => {
				resolve(r.rows.length ? r.rows.item(0) : null);
			}, (error) => {
				reject(error);
			});
		});
	}

	selectAll(sql, params = null) {
		return this.exec(sql, params).then((r) => {
			let output = []
			for (let i = 0; i < r.rows.length; i++) {
				output.push(r.rows.item(i));
			}
			return output;
		});
	}

	exec(sql, params = null) {
		return new Promise((resolve, reject) => {
			this.db_.executeSql(sql, params, (r) => {
				if ('insertId' in r) this.lastInsertId_ = r.insertId;
				resolve(r);
			}, (error) => {
				reject(error);
			});
		});
	}

	lastInsertId() {
		return this.lastInsertId_;
	}

}

module.exports = { DatabaseDriverReactNative };