module.exports = function ({ models, Users }) { const { readFileSync, writeFileSync } = require("fs-extra"); var path = __dirname + "/data/usersData.json"; try { var Currencies = require(path) } catch { writeFileSync(path, "{}", { flag: 'a+' }); } async function saveData(data) { try { if (!data) throw new Error('Data cannot be left blank'); writeFileSync(path, JSON.stringify(data, null, 4)) return true } catch (error) { return false } } async function getData(userID) { try { if (!userID) throw new Error("User ID cannot be blank"); if (isNaN(userID)) throw new Error("Invalid user ID"); if (!userID) throw new Error("userID cannot be empty"); if (!Currencies.hasOwnProperty(userID)) console.log(`User ID: ${userID} does not exist in Database`); const data = await Users.getData(userID); return data } catch (error) { console.log(error) return false }; } async function setData(userID, options = {}) { try { if (!userID) throw new Error("User ID cannot be blank"); if (isNaN(userID)) throw new Error("Invalid user ID"); if (!userID) throw new Error("userID cannot be empty"); if (!Currencies.hasOwnProperty(userID)) throw new Error(`User ID: ${userID} does not exist in Database`); if (typeof options != 'object') throw new Error("The options parameter passed must be an object"); Currencies[userID] = {...Currencies[userID], ...options}; await saveData(Currencies); return Currencies[userID]; } catch (error) { return false } } async function delData(userID, callback) { try { if (!userID) throw new Error("User ID cannot be blank"); if (isNaN(userID)) throw new Error("Invalid user ID"); if (!usersData.hasOwnProperty(userID)) throw new Error(`User ID: ${userID} does not exist in Database`); usersData[userID].money = 0; await saveData(usersData); if (callback && typeof callback == "function") callback(null, usersData); return usersData; } catch (error) { if (callback && typeof callback == "function") callback(error, null); return false } } async function increaseMoney(userID, money) { if (typeof money != 'number') throw global.getText("currencies", "needNumber"); try { let balance = (await getData(userID)).money; await setData(userID, { money: balance + money }); return true; } catch (error) { console.error(error); throw new Error(error); } } async function decreaseMoney(userID, money) { if (typeof money != 'number') throw global.getText("currencies", "needNumber"); try { let balance = (await getData(userID)).money; if (balance < money) return false; await setData(userID, { money: balance - money }); return true; } catch (error) { throw new Error(error); } } return { getData, setData, delData, increaseMoney, decreaseMoney }; };