class KeyframesModel extends WindozModel {

    constructor() {
        super()
        this.ressource = '/keyframes'
    }

    async list(kfId, prevKFId='') {
        let endpoint = {...app.config.api[this.ressource].list}
        const filters = {}
        //Caution, undefined is  != NULL here, because prev_kfId ull means root, while undefined means no filtering
        if((typeof(kfId) != 'undefined') && (kfId!=='')) filters['kfId'] = kfId
        if((typeof(prevKFId) != 'undefined') && (prevKFId!=='')) filters['prevKFId'] = prevKFId
        return ( 
            this.request(endpoint.uri, endpoint.method, filters)
        )
    }

    async getKeyframe(kfId){
        let endpoint = {...app.config.api[this.ressource].get}
        endpoint.uri = endpoint.uri.replace('{kfId}', kfId)
        return ( 
            this.request(endpoint.uri, endpoint.method, kfId)
        )
    }

    async create(kfData, prevKFId) {
        let endpoint = {...app.config.api[this.ressource].create}
        return ( 
            this.request(endpoint.uri, endpoint.method, kfData)
        )
    }

    async rename(kfData, prevKFId) {
        let endpoint = {...app.config.api[this.ressource].create}
        return ( 
            this.request(endpoint.uri, endpoint.method, kfData)
        )
    }

    async save(kfId, data) {
        const kfData = Object.keys(data).map(aid => {
            const { position, speed, ...storeValues} = data[aid].values
            return({
                aid: aid,   
                type: data[aid].type,
                storeValues: storeValues,
                gpsValues: { position: data[aid].values.position, speed: data[aid].values.speed }
            })
        })

        let endpoint = {...app.config.api[this.ressource].saveAgents}
        endpoint.uri = endpoint.uri.replace('{kfId}', kfId)
        return ( 
            this.request(endpoint.uri, endpoint.method, kfData)
        )
    }
  
}

app.registerClass('KeyframesModel', KeyframesModel);