public static void Main()
foreach (var taskType in Enum.GetValues<TaskTypeDto>())
foreach (var state in Enum.GetValues<OnboardingState>())
Console.WriteLine("{0} + {1} = {2}", taskType, state, GetCurrentTaskStatus(state, taskType));
public static TaskStatusDto GetCurrentTaskStatus(OnboardingState onboardingState, TaskTypeDto taskType) => (taskType, onboardingState) switch
(TaskTypeDto.IntakeForms, OnboardingState.UploadForms) => TaskStatusDto.NotStarted,
(TaskTypeDto.IntakeForms, OnboardingState.WaitingForAnnotation) => TaskStatusDto.InProgressWaitingForZocdoc,
(TaskTypeDto.IntakeForms, _) => TaskStatusDto.Complete,
(TaskTypeDto.IntakePreferences, OnboardingState.Start) => TaskStatusDto.Complete,
(TaskTypeDto.IntakePreferences, OnboardingState.TestInvitation) => TaskStatusDto.Complete,
(TaskTypeDto.IntakePreferences, OnboardingState.IntakeNotActivated) => TaskStatusDto.Complete,
(TaskTypeDto.IntakePreferences, OnboardingState.IntakeActivated) => TaskStatusDto.Complete,
(TaskTypeDto.IntakePreferences, _) => TaskStatusDto.NotStarted,
(TaskTypeDto.IntakePreviewExperience, OnboardingState.IntakeActivated) => TaskStatusDto.Complete,
(TaskTypeDto.IntakePreviewExperience, OnboardingState.IntakeNotActivated) => TaskStatusDto.Complete,
(TaskTypeDto.IntakePreviewExperience, _) => TaskStatusDto.NotStarted,
(TaskTypeDto.IntakeActivation, OnboardingState.IntakeActivated) => TaskStatusDto.Complete,
(TaskTypeDto.IntakeActivation, _) => TaskStatusDto.NotStarted,
(_, _) => throw new Exception($"Requested task {taskType} is not an intake task")
public enum TaskStatusDto
InProgressWaitingForZocdoc,
public enum OnboardingState