package designPatternExtensions.designPattern;

import designPatternExtensions.*;
import models.objectOrientedTransfer.*;

import java.util.ArrayList;

//https://github.com/iluwatar/java-design-patterns/tree/master/memento

public class Memento implements DesignPattern{
    public DataTransferDesign create() throws IllegalRelationException {
        DataTransferDesign design = ModelLoader.load("models/Memento.Json");
        DataTransferContext dtc = design.getTransferContexts().getFirst();
        ObjectNode star = dtc.getSrcFirstResource();
        ObjectNode states = dtc.getDstFirstResource();

        ObjectNode presenter = new ObjectNode("Main");
        PresenterInsertion main = new PresenterInsertion(star, states,
                presenter, dtc.getTransferStyle(), true);
        design.addPresenterInsertion(main);

        DataTransferContext dtc2 = design.getTransferContexts().getLast();
        ObjectNode states2 = dtc2.getSrcFirstResource();
        ObjectNode star2 = dtc2.getDstFirstResource();

        PresenterInsertion main2 = new PresenterInsertion(states2, star2,
                presenter, dtc2.getTransferStyle(), true);
        design.addPresenterInsertion(main2);

        ObjectNode starMementoInternal = new ObjectNode("StarMementoInternal");
        DependencyInversion di = new DependencyInversion(
                starMementoInternal, new InterfaceNode(starMementoInternal, "StarMemento")
        );
        design.addDependencyInversion(di);

        return design;

    }
}
