import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import generators.ASTGenerator;
import models.objectOrientedTransfer.*;
import parser.Parser;
import parser.Value;
import parser.exceptions.ExpectedArrayValue;
import parser.exceptions.ExpectedJsonValue;
import parser.exceptions.ExpectedStringValue;

public class Main {

    public static void main(String[] args) {
//		List<ReferenceEdge> srcEdges = new ArrayList<>();
//		List<ReferenceEdge> dstEdges = new ArrayList<>();
//		ObjectNode companies = new ObjectNode("Companies");
//		ObjectNode company = new ObjectNode("Company");
//		ObjectNode customers = new ObjectNode("Customers");
//		ObjectNode customer = new ObjectNode("Customer");
//		ObjectNode address = new ObjectNode("String");
//		ReferenceEdge srcEdge = new ReferenceEdge(companies, company, "company", "String");
//		srcEdges.add(srcEdge);
//		ReferenceEdge dstEdge = new ReferenceEdge(customers, customer, "customer", "String");
//		dstEdges.add(dstEdge);
//		List<Relation> relations = new ArrayList<>();
//		Relation transferRelation = new Relation(company, customer, MultiplicityValue.OneToOne);
//		DataTransferContext context = new DataTransferContext(relations, transferRelation, address, "address", PushPullValue.PULL);
//        DataTransferDesign design;
//        try {
//            design = new DataTransferDesign(context);
//            System.out.println(ASTGenerator.generate(design));
//        } catch (IllegalRelationException e) {
//            e.printStackTrace();
//        }
        File file = new File("models/CustomerManagement.Json");
        try {
            Parser parser = new Parser(new BufferedReader(new FileReader(file)));
            Value jsonValue = parser.getValue();
            DataTransferContext context = new DataTransferContext(jsonValue);
            DataTransferDesign design;
            try {
                design = new DataTransferDesign(context);
                System.out.println(ASTGenerator.generate(design));
            } catch (IllegalRelationException e) {
                e.printStackTrace();
            }
        } catch (ExpectedArrayValue | ExpectedStringValue | ExpectedJsonValue | FileNotFoundException e) {
            e.printStackTrace();
        }
    }

}
