package org.ntlab.rdlcanvas.generaterdl;

import org.ntlab.rdlcanvas.parser.Parser;
import org.ntlab.rdlcanvas.parser.StringValue;
import org.ntlab.rdlcanvas.parser.Value;

import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class GenerateRDL {

    List<List> screendataList = new ArrayList<List>(); //各画面のWidget一覧
    List<List> rdlList = new ArrayList<List>(); //RDLのメゾットを格納するリスト

    public GenerateRDL(){
        Parser parser = new Parser();
        createScreenData(parser.getValue());
        for(List<String> data : screendataList){
            System.out.println("screenId: " + data.get(0) + ", wId: " + data.get(1) + ", wMeta: " + data.get(2) + ", data: " + data.get(3));

        }

    }

    public GenerateRDL(final BufferedReader reader){
        Parser parser = new Parser(reader);
        createScreenData(parser.getValue());
    }

    // 画面ID、ウィジェットID、ウィジェットメタデータ、データを取得してListに変換、screendataListに格納
    private void createScreenData (Value value){

        Map<StringValue, Value> screenmap = ((org.ntlab.rdlcanvas.parser.JsonValue)value).getJson();

        for (StringValue key1 : screenmap.keySet()){
            String screenId = key1.getStringValue(); //ScreenIDを取得
            Value widget = screenmap.get(key1);
            Map<StringValue, Value> widgetmap = ((org.ntlab.rdlcanvas.parser.JsonValue)widget).getJson();
            for (StringValue key2 : widgetmap.keySet()){
                String wId = key2.getStringValue(); //WidgetIDを取得
                Value meta = widgetmap.get(key2);
                Map<StringValue, Value> metamap = ((org.ntlab.rdlcanvas.parser.JsonValue)meta).getJson();
                for (StringValue key3 : metamap.keySet()){
                    String metaID = key3.getStringValue(); //MetaIDを取得
                    Value data = metamap.get(key3); //Dataを取得

                    List<String> datalist = new ArrayList<String>(Arrays.asList(screenId, wId, metaID, data.toString()));
                    screendataList.add(datalist);
                    //System.out.println("screenId: " + screenId + ", wId: " + wId + ", metaID: " + metaID + ", data: " + data.toString());
                }
            }
        }
    }

    // RDLを生成
    private void createRDL(List<List> screendataList){
        // RDLを生成する処理をここに実装する
    }

    // screendataListを返す
    public List<List> getScreendataList() {
        return screendataList;
    }

    // screendataListに画面ID、ウィジェットID、ウィジェットメタデータ、データを追加
    public void setScreendataList(String screenId, String wId, String metaID, String data){
        screendataList.add(Arrays.asList(screenId, wId, metaID, data));
    }
}
