/// <summary>
        /// Builds a flex field value object
        /// </summary>
        /// <param name="dailyRoutineFunctionNameGenerator">Daily routine function name generator</param>
        /// <param name="npc">Npc to which the event belongs</param>
        /// <param name="exportEvent">Export event</param>
        /// <param name="project">Project</param>
        /// <param name="projectConfig">Project config</param>
        /// <param name="exportSettings">Export settings</param>
        /// <returns>Converted value</returns>
        public static async Task <ScribanExportDailyRoutineEvent> ConvertDailyRoutineEvent(IDailyRoutineFunctionNameGenerator dailyRoutineFunctionNameGenerator, KortistoNpc npc, KortistoNpcDailyRoutineEvent exportEvent, GoNorthProject project,
                                                                                           MiscProjectConfig projectConfig, ExportSettings exportSettings)
        {
            ScribanExportDailyRoutineEvent convertedEvent = new ScribanExportDailyRoutineEvent();

            convertedEvent.OriginalEvent                           = exportEvent;
            convertedEvent.EventId                                 = exportEvent.EventId;
            convertedEvent.EarliestTime                            = ConvertEventTime(exportEvent.EarliestTime, projectConfig);
            convertedEvent.LatestTime                              = ConvertEventTime(exportEvent.LatestTime, projectConfig);
            convertedEvent.UnescapedMovementTarget                 = exportEvent.MovementTarget != null && !string.IsNullOrEmpty(exportEvent.MovementTarget.Name) ? exportEvent.MovementTarget.Name : null;
            convertedEvent.UnescapedMovementTargetExportName       = exportEvent.MovementTarget != null && !string.IsNullOrEmpty(exportEvent.MovementTarget.ExportName) ? exportEvent.MovementTarget.ExportName : null;
            convertedEvent.UnescapedMovementTargetExportNameOrName = GetMovementTargetExportNameOrName(exportEvent.MovementTarget);
            convertedEvent.MovementTarget                          = EscapeValueIfExist(convertedEvent.UnescapedMovementTarget, exportSettings);
            convertedEvent.MovementTargetExportName                = EscapeValueIfExist(convertedEvent.UnescapedMovementTargetExportName, exportSettings);
            convertedEvent.MovementTargetExportNameOrName          = EscapeValueIfExist(convertedEvent.UnescapedMovementTargetExportNameOrName, exportSettings);
            convertedEvent.ScriptType                              = ScribanScriptUtil.ConvertScriptType(exportEvent.ScriptType);
            if (exportEvent.ScriptType != ExportConstants.ScriptType_None)
            {
                convertedEvent.ScriptName         = exportEvent.ScriptName;
                convertedEvent.ScriptFunctionName = await dailyRoutineFunctionNameGenerator.GetNewDailyRoutineStepFunction(project.Id, npc.Id, exportEvent.EventId);
            }
            else
            {
                convertedEvent.ScriptName         = null;
                convertedEvent.ScriptFunctionName = null;
            }
            convertedEvent.TargetState        = !string.IsNullOrEmpty(exportEvent.TargetState) ? exportEvent.TargetState : null;
            convertedEvent.IsEnabledByDefault = exportEvent.EnabledByDefault;

            return(convertedEvent);
        }
        /// <summary>
        /// Maps the daily routine data of an npc
        /// </summary>
        /// <param name="cachedDbAccess">Gecachter Datenzugriff</param>
        /// <param name="dailyRoutineFunctionNameGenerator">Daily routine function name generator</param>
        /// <param name="npc">Npc</param>
        /// <param name="dailyRoutine">Daily routine data</param>
        /// <returns>Mapped daily routine events</returns>
        public static async Task <List <ScribanExportDailyRoutineEvent> > MapNpcDailyRoutineEvents(IExportCachedDbAccess cachedDbAccess, IDailyRoutineFunctionNameGenerator dailyRoutineFunctionNameGenerator, KortistoNpc npc, List <KortistoNpcDailyRoutineEvent> dailyRoutine)
        {
            if (dailyRoutine == null || !dailyRoutine.Any())
            {
                return(new List <ScribanExportDailyRoutineEvent>());
            }

            GoNorthProject project = await cachedDbAccess.GetUserProject();

            MiscProjectConfig projectConfig = await cachedDbAccess.GetMiscProjectConfig();

            ExportSettings exportSettings = await cachedDbAccess.GetExportSettings(project.Id);

            List <ScribanExportDailyRoutineEvent> mappedEvents = new List <ScribanExportDailyRoutineEvent>();

            foreach (KortistoNpcDailyRoutineEvent curEvent in dailyRoutine)
            {
                ScribanExportDailyRoutineEvent convertedEvent = await ConvertDailyRoutineEvent(dailyRoutineFunctionNameGenerator, npc, curEvent, project, projectConfig, exportSettings);

                mappedEvents.Add(convertedEvent);
            }

            return(mappedEvents);
        }