using Salmon.Core.Depth; using System.Resources; namespace Salmon.Core; public class Instance { public Depth.Persistence? Persistence { get; set; } = null; public Depth.StateMachine State { get; } = new Depth.StateMachine(); public Depth.EventManager Event { get; } = new Depth.EventManager(); public Cliff.Translator Translator { get; set; } = new Cliff.Translator(); public Instance(Persistence? persistence = null) { Persistence = persistence; State.Events = Event; State.History = persistence; Event.History = persistence; } public async Task Init() { await State.PopulateWithHistory(); } public IEnumerable GetAllElements() { List els = new(); foreach (var id in State.GetIds().ToArray()) { var ts = State.Get(id).ToList(); var el = Translator.Decode(ts); els.Add(el); } return els; } public void Set(Event e) { Event.Push(e); } public void Set(Element element) { var triplets = Translator.Encode(element); Set(triplets); } public void Set(IEnumerable triplets) { foreach (var t in triplets) State.Push(t.key, t.predicate, t.value, t.LastFlush); } public T? RetrieveElement(string id) where T : Element { var triplets = State.Get(id).ToList(); if (triplets.Count == 0) return null; return Translator.Decode(triplets); } public DateTime? GetLastElementUpdate(string id) { return State.GetLastUpdate(id); } }