import SparqlTask from '../Core/SparqlTask'
import generateBody from './generateBody'
import sparqljs from 'sparqljs';
import {UnaryOperationType, UnaryOperation, unaryFunction, operationUnroller} from './unaryFunctions';

export interface UnaryOperation {
    operation: UnaryOperationType;
    json_pointers: string | string[];
    arguments?: any
}

export interface QueryModel {
    model: string,
    set: Array<UnaryOperation> 
}
export function generateQueryRequest(queryRequest: QueryModel) {
    let body: string = '';
    if (Array.isArray(queryRequest.set)) {
        // There is only unary operation
        let _body = operationUnroller(queryRequest.model, queryRequest.set)
        body = <string>generateBody(_body)
    } else {
        // There is binary operation, likely UNION
        // body = 'SELECT DISTINCT ' + '?' + queryRequest.model + ' WHERE {'
        // body += queryRequest.set.subsets.map((subDefinition) => {
        //     let subBody = operationUnroller(queryRequest.model, subDefinition);
        //     return '{' + generateBody(subBody, '') + '}'
        // }).join('\nUNION\n');
        // body += '}';
        // return bodyRequest;
    }
    return body;
    let parser = new sparqljs.Parser(
        SparqlTask.prefixes
    );
    let parsedQuery = parser.parse(body);
    let generator = new sparqljs.Generator()
    return generator.stringify(parsedQuery)
}

export default generateQueryRequest;