const { Model } = require('flitter-orm')

class SettingModel extends Model {
    static get services() {
        return [...super.services, 'utility']
    }

    static get schema() {
        return {
            key: String,
            value: String,
            history: [String],
        }
    }

    static async guarantee(key, value = '') {
        if ( !(await this.findOne({ key })) ) {
            const new_inst = new this({ key })
            new_inst.set(value)
            await new_inst.save()
        }
    }

    static async get(key) {
        const inst = await this.findOne({ key })
        return inst?.get()
    }

    static async set(key, value) {
        const inst = await this.findOne({ key })
        inst.set(value)
        await inst.save()
    }

    get() {
        return JSON.parse(this.value)
    }

    set(value) {
        if ( Array.isArray(this.history) )
            this.history.push(this.value)

        this.value = JSON.stringify(value)
    }

    async to_api() {
        return {
            id: this.key,
            key: this.key,
            value: this.get(),
            history: this.history || [],
        }
    }
}

module.exports = exports = SettingModel
