package com.airlock.iam.flow.infrastructure.serialization;

import com.airlock.iam.flow.domain.model.event.StateMachineFlowEvent;
import com.airlock.iam.flow.domain.model.statemachine.FlowState;
import jakarta.inject.Inject;
import org.springframework.statemachine.StateMachineContext;
import org.springframework.statemachine.StateMachinePersist;

public final class FlowStateMachinePersist implements StateMachinePersist<FlowState, StateMachineFlowEvent, SerializedStateMachineContext> {
   private final StateMachineContextSerializer serializer;

   @Inject
   public FlowStateMachinePersist(StateMachineContextSerializer serializer) {
      this.serializer = serializer;
   }

   public void write(StateMachineContext<FlowState, StateMachineFlowEvent> context, SerializedStateMachineContext state) {
      state.setData(this.serializer.toByteArray(context));
   }

   public StateMachineContext<FlowState, StateMachineFlowEvent> read(SerializedStateMachineContext state) {
      return this.serializer.toStateMachineContext(state.getData());
   }
}
