using MeetingAssistant.MeetingNotes; namespace MeetingAssistant.Workflow; public enum MeetingWorkflowEventType { Created, StateTransition, SpeakerIdentified, TranscriptLine, AttendeeAdded } public sealed record MeetingWorkflowEvent( MeetingWorkflowEventType Type, MeetingSessionArtifacts Artifacts, AssistantContextState? FromState = null, AssistantContextState? ToState = null, string? SpeakerName = null, string? TranscriptLineText = null, string? AttendeeName = null) { public static MeetingWorkflowEvent Created(MeetingSessionArtifacts artifacts) { return new MeetingWorkflowEvent(MeetingWorkflowEventType.Created, artifacts); } public static MeetingWorkflowEvent StateTransition( MeetingSessionArtifacts artifacts, AssistantContextState from, AssistantContextState to) { return new MeetingWorkflowEvent(MeetingWorkflowEventType.StateTransition, artifacts, from, to); } public static MeetingWorkflowEvent SpeakerIdentified( MeetingSessionArtifacts artifacts, string speakerName) { return new MeetingWorkflowEvent(MeetingWorkflowEventType.SpeakerIdentified, artifacts, SpeakerName: speakerName); } public static MeetingWorkflowEvent TranscriptLine( MeetingSessionArtifacts artifacts, string line, string speakerName) { return new MeetingWorkflowEvent( MeetingWorkflowEventType.TranscriptLine, artifacts, SpeakerName: speakerName, TranscriptLineText: line); } public static MeetingWorkflowEvent AttendeeAdded( MeetingSessionArtifacts artifacts, string attendeeName) { return new MeetingWorkflowEvent( MeetingWorkflowEventType.AttendeeAdded, artifacts, AttendeeName: attendeeName); } }