package org.ntlab.rdlcanvas.generaterdl;

import org.ntlab.rdlcanvas.models.*;

import java.util.ArrayList;
import java.util.List;


public class MetaScreenGenerateRDL extends BaseMetaGenerateRDL {

    ArrayList<String> metaIdList = new ArrayList<>(List.of("wText", "wType", "wState", "wX", "wY", "wWidth", "wHeight", "wEnabled", "wVisible", "wColor"));

    public MetaScreenGenerateRDL(RDLSpec spec){
        addScreenTemplateResourceDeclaration(spec);
        addScreenTemplateFormula(spec);
        //System.out.println(spec.toString()); //デバッグ用
    }

    private void addScreenTemplateResourceDeclaration(RDLSpec spec){

        //ex screen(1) :: struct
        addResourceDeclaration(spec, "screen", 1, StructuralType.structure, null);
        addResourceDeclaration(spec, "scId", 1, StructuralType.id, RDLSpecLang.typeString);
        addResourceDeclaration(spec, "widget", 2, StructuralType.structure, null);
        addResourceDeclaration(spec, "wId", 2, StructuralType.id, RDLSpecLang.typeString);
        addResourceDeclaration(spec, "wText", 2, RDLSpecLang.typeString);
        addResourceDeclaration(spec, "wType", 2, RDLSpecLang.typeString);
        addResourceDeclaration(spec, "wState", 2, RDLSpecLang.typeString);
        addResourceDeclaration(spec, "wX", 2, RDLSpecLang.typeInt);
        addResourceDeclaration(spec, "wY", 2, RDLSpecLang.typeInt);
        addResourceDeclaration(spec, "wWidth", 2, RDLSpecLang.typeInt);
        addResourceDeclaration(spec, "wHeight", 2, RDLSpecLang.typeInt);
        addResourceDeclaration(spec, "wEnabled", 2, RDLSpecLang.typeBoolean);
        addResourceDeclaration(spec, "wVisible", 2, RDLSpecLang.typeBoolean);
        addResourceDeclaration(spec, "wColor", 2, RDLSpecLang.typeString);
    }

    private void addScreenTemplateFormula(RDLSpec spec){

        //ex screen:scId
        addElementPairDependencyFormula(spec, "screen", false, "scId", false);
        addElementPairDependencyFormula(spec, "screen", false, "scId", true);
        for(String mId : metaIdList){
            addElementPairDependencyFormula(spec, mId,false, "widget", false);
        }

        // [widget:wid]:screen
        addNestedDependencyFormula(spec, "widget", false, "wId", false, "screen", false);

    }



}
