class KeyframeView extends WindozDomContent {

    constructor() {
        super()
        Object.assign(this, app.helpers.activeAttributes)
        Object.assign(this, app.helpers.formBuilder)
    }
    
    DOMContentFocused(options) { 
        if(this.wasBlured){ // Avoid 2nd refesh on DomContentLoaded
            //this.refreshyoustuff() 
        }
        this.wasBlured = false
    }

    DOMContentBlured(options) { this.wasBlured = true }

    async DOMContentLoaded(options) {    
        this.windowPrefsId = `editors.keyframeview`
        this.models = options.models
        const components = ui.eicfy(this.el)       
        this.setupTriggers(components)        
        this.setupRefs(components)

        const [sprites, types] = await Promise.all([
            this.models.agents.getSprites('Basic 3D'),
            this.models.agents.getTypes('Test agents')
        ])

        this.agentSprites = sprites
        this.agentTypes = types


        this.outputs.agentsSelector.fillOptions( this.agentTypes.map(item => {
            return({ markup: `<i class="icon-${item.atp_hascode ? 'bug' : 'atom1'}"></i>${item.atp_name}`, value: item.atp_id})
        }))
        this.outputs.agentsSelector.addEventListener('change',this.onChangeAgent.bind(this))
        
        this.agentPreview = new app.LoadedModules.AgentPreview(this.outputs.agentSampleCanvas, this.agentSprites)
        this.onChangeAgent()
        this.agentPreview.startRendering()
        this.agentPreview.animation = true

        this.kfArena = new app.LoadedModules.kfArena(this.outputs.kfArenaCanvas, this.agentSprites)
        this.kfArena.startRendering()

        
        this.outputs.btnAddAgent.disabled = true
        this.outputs.btnRemoveAgent.disabled = true        
    }

    async onChangeAgent(event){
        if(this.outputs.agentsSelector.value) this.agentPreview.setAgent(this.outputs.agentsSelector.value)
        if(!this.outputs.agentsSelector.value) return
        const agent = await this.models.agents.getProperties(this.outputs.agentsSelector.value)
        this.fillAgentProperties(agent.atp_props)
    }

    onAddAgent(event){
        const aid = crypto.randomUUIDv7()
        this.kfArena.addAgent(this.outputs.agentsSelector.value, aid, {
            x: document.querySelector('[name="position.x"]').value,
            y: document.querySelector('[name="position.y"]').value,
            z: document.querySelector('[name="position.z"]').value,
        })
    }

    fillAgentProperties(agentProps){ 
        this.outputs.agentProperties.innerHTML=''
        this.outputs.agentProperties.append(...this.fieldsFromJSON(agentProps, 'Internal properties'))
        this.outputs.agentProperties.append(...this.fieldsFromJSON({
            "position.x": {
                label: "Position X",
                type: "number",
                default: "0"
            },
            "position.y": {
                label: "Position Y",
                type: "number",
                default: "0"
            },
            "position.z": {
                label: "Position Z",
                type: "number",
                default: "0"
            },
        }, 'Coordinates'))
        this.outputs.agentProperties.append(...this.fieldsFromJSON({
            "speed.x": {
                label: "Speed X",
                type: "number",
                default: "0"
            },
            "speed.y": {
                label: "Speed Y",
                type: "number",
                default: "0"
            },
            "speed.z": {
                label: "Speed Z",
                type: "number",
                default: "0"
            },
        }, 'Speed vector'))
        this.outputs.btnAddAgent.disabled = false
    }

}

app.registerClass('KeyframeView', KeyframeView)

