package com.example.test.dtram;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Component;

import models.dataConstraintModel.JsonTerm;
import models.dataFlowModel.DataTransferModel;
import parser.Parser;
import simulator.Simulator;
import simulator.interfaces.html.HtmlElement;
import simulator.interfaces.html.HtmlPresenter;
import simulator.interfaces.html.IWebSocketMessageSender;

@Component
public class Dtram {
	
	File file;
	DataTransferModel model;
	Simulator simulator;
	
	private final IWebSocketMessageSender ws;
	
	private Map<String, HtmlElement> elements;
	
	HtmlPresenter presenter;
	
	Dtram(IWebSocketMessageSender ws){
		this.ws = ws;
		elements = new HashMap<>();
	}
	
	public void initModel(String path) {
		file = new File(path);
		System.out.println(path);
		try {
			Parser parser = new Parser(new BufferedReader(new FileReader(file)));
			model  = parser.doParse();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public void initModel(InputStream stream) {
		try {
			Parser parser = new Parser(new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8)));
			model  = parser.doParse();
		}
		catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public void startSimulator() {
		simulator = new Simulator(model);
		simulator.init();
		presenter = new HtmlPresenter(simulator, ws, elements);
	}
	
	public void onRestEvent(String id, String method, JsonTerm message) {
		elements.get("\"" + id + "\"").onRestEvent(method, message);
	}
	
	
	
	
}
