const VersionedModel = require('../../VersionedModel')
const uuid = require('uuid/v4')

/*
 * ColumnDef Model
 * -------------------------------------------------------------
 * Put some description here!
 */
class ColumnDef extends VersionedModel {
    static get schema() {
        // Return a flitter-orm schema here.
        return {
            ...super.schema,
            headerName: String,
            field: String,
            DatabaseId: String,
            UUID: { type: String, default: () => uuid() },
            Type: { type: String, default: 'text' }, // text, number for now
            additionalData: { type: String, default: '{}' }
        }
    }

    // Static and instance methods can go here
    data_get(key) {
        return JSON.parse(this.additionalData ? this.additionalData : '{}')[key]
    }

    data_set(key, value) {
        const json = JSON.parse(this.additionalData ? this.additionalData : '{}')
        json[key] = value
        this.additionalData = JSON.stringify(json)
    }

    data() {
        return JSON.parse(this.additionalData ? this.additionalData : '{}')
    }

    to_api_object() {
        return {
            name: this.headerName,
            uuid: this.UUID,
            database_id: this.DatabaseId,
            type: this.Type,
            metadata: this.data(),
            version_num: this.version_num,
            version_message: this.version_message,
        }
    }
}

module.exports = exports = ColumnDef
