const JSUnit = require('./lib/jsunit.js')
let isStateKey = JSUnit.isStateKey

function makeRepFromModule(mdl) {
    // rep != mdl 
    // rep is rep of mdl 
    var rep = {
        description: {
            id: mdl.description.id,
            name: mdl.description.name,
            alt: mdl.description.alt,
            path: mdl.description.path
        }
    }

    // yikes tho, corner cases should be easier ... 
    if(mdl.description.isHardware){
        rep.description.isHardware = true
    }

    if(mdl.description.isLink){
        rep.description.isLink = true 
    }

    if(mdl.description.position){
        rep.description.position = mdl.description.position
    }

    // TODO: making rep. of input / output should be a f'n of that object ...
    // input, outputs, state objs should be known /sysobjects 
    // everything else is free play 
    rep.inputs = {}
    for (key in mdl.inputs) {
        rep.inputs[key] = {}
        rep.inputs[key].accepts = mdl.inputs[key].accepts
    }

    rep.outputs = {}
    for (key in mdl.outputs) {
        rep.outputs[key] = {}
        rep.outputs[key].emits = mdl.outputs[key].emits
        rep.outputs[key].calls = new Array()
        mdl.outputs[key].calls.forEach(function(inp) {
            var input = {
                parentId: inp.parentId,
                key: inp.key
            }
            rep.outputs[key].calls.push(input)
        })
    }

    rep.state = {}
    for(key in mdl.state){
        if(isStateKey(key)){
            rep.state[key] = mdl.state[key]
        }
    }

    return rep
}

module.exports = {
    makeFromModule: makeRepFromModule
}