package org.ntlab.rdlcanvas.generaterdl;

import org.ntlab.rdlcanvas.models.*;

import java.util.ArrayList;

public class BaseGenerateRDL {

    // [depending: insideDependedId -> insideArguments] : outsideDependedId -> outsideArguments]
    public RDLSpecDependencyTerm createNestDependencyTerm(RDLSpec spec, String depending, String insideDependedId, boolean insideDependedIdPrime, String insideArgument, String outsideDependedId, boolean outsideDependedIdPrime, String outsideArgument){

        ArrayList<RDLSpecEvaluatableTerm> insideDependedResourceList = new ArrayList<>();
        ArrayList<RDLSpecEvaluatableTerm> insideArgumentsList = new ArrayList<>();
        ArrayList<RDLSpecEvaluatableTerm> outsideDependedResourceList = new ArrayList<>();
        ArrayList<RDLSpecEvaluatableTerm> outsideArgumentsList = new ArrayList<>();

        insideArgumentsList.add(spec.getConstant(insideArgument, RDLSpecLang.typeString));
        outsideArgumentsList.add(spec.getConstant(outsideArgument, RDLSpecLang.typeString));

        if(insideDependedIdPrime){
            insideDependedResourceList.add(spec.getRDLSpecResourceDeclaration(insideDependedId).getPrimedResource());
        }else{
            insideDependedResourceList.add(spec.getRDLSpecResourceDeclaration(insideDependedId).getResource());
        }

        if(outsideDependedIdPrime){
            outsideDependedResourceList.add(spec.getRDLSpecResourceDeclaration(outsideDependedId).getPrimedResource());
        }else {
            outsideDependedResourceList.add(spec.getRDLSpecResourceDeclaration(outsideDependedId).getResource());
        }


        RDLSpecDependencyTerm insideDependencyTerm = new RDLSpecDependencyTerm(spec.getRDLSpecResourceDeclaration(depending).getResource(),  insideDependedResourceList, insideArgumentsList);
        RDLSpecDependencyTerm outsideDependencyTerm = new RDLSpecDependencyTerm(insideDependencyTerm, outsideDependedResourceList, outsideArgumentsList);


        return outsideDependencyTerm;
    }


}
