
import SparqlObject from '../SparqlObject/SparqlObject'
import {ConfigurationElementI, ConfigurationAttribute} from './types'
import SparqlTask from './SparqlTask'
export function init(configurationArray: {attributes: Array<string | ConfigurationAttribute>, definition: string, reference: string, primaryKey: string, prefixes?: {[key:string] : string}}[] = []) {
    let configurationMap: { [ref: string]: ConfigurationElementI } = {};
    let sparqlObjects: { [ref: string]: SparqlObject } = {};
    configurationArray.forEach((configuration) => {
        configurationMap[configuration.reference] = {
            reference: configuration.reference,
            attributes: [],
            definition: configuration.definition,
            primaryKey: configuration.primaryKey,
            prefixes: configuration.prefixes || {}
        };
        SparqlTask.prefixes = {...SparqlTask.prefixes, ...configuration.prefixes}
        configuration.attributes.forEach((attribute) => {
            let initAttribute: ConfigurationAttribute;
            if (typeof attribute === "string") {
                initAttribute = new ConfigurationAttribute();
                initAttribute.name = attribute;
            } else {
                initAttribute = { ...{ arrayable: false, reference: null }, ...attribute };
            }
            configurationMap[configuration.reference].attributes.push(initAttribute);
        })
    });
    Object.keys(configurationMap).forEach((reference) => {
        let object = new SparqlObject(configurationMap[reference]);
        sparqlObjects[reference] = object;
    })
    return sparqlObjects;
}

export default init;