import sparqljs from 'sparqljs'
import SparqlTask from '../Core/SparqlTask'
import { groupBy, jsonRepresentation } from './_select'
// import {jsonRepresentation as js2} from './_select'
import DefinitionPattern from './DefinitionPattern'


export function generate(this: DefinitionPattern, reference: string) {
    let model = SparqlTask.sparqlObjects[reference];
    // model.prefixes
    let parser = new sparqljs.Parser(model.prefixes);
    // console.log(jsonRepresentation(reference, reference, [], true));
    let _parsed = parser.parse(`SELECT ${jsonRepresentation(reference, reference, [], true)}  WHERE { ${model.coreDefinition} } GROUP BY ${groupBy(reference)}`);
    this.query = <sparqljs.SelectQuery>_parsed;
    model.attributes.filter(attribute => attribute.reference)
        .forEach((attribute) => {
            let subDef = new DefinitionPattern(attribute.reference)
            // Link between outter and nested
            this.subQuery[attribute.name] = subDef;
        })
    this.primaryKey = model.primaryKey;
    this.query.prefixes = model.prefixes || {};
}

export default generate;

// let query: sparqljs.SparqlQuery = new sparqljs.SparqlQuery;
// query.type 