public static int SaveQuestConnection(QuestConnection input)
        {
            IQuestRepository repo = new EFQuestRepository();

            var questConnection = repo.QuestConnections.FirstOrDefault(q => q.Id == input.Id);

            if (questConnection == null)
            {
                questConnection = new QuestConnection();
            }

            questConnection.ActionName               = input.ActionName;
            questConnection.ConnectionName           = input.ConnectionName;
            questConnection.HideIfRequirementsNotMet = input.HideIfRequirementsNotMet;
            questConnection.QuestId            = input.QuestId;
            questConnection.QuestStateFromId   = input.QuestStateFromId;
            questConnection.QuestStateToId     = input.QuestStateToId;
            questConnection.QuestStateFailToId = input.QuestStateFailToId;
            questConnection.RankInList         = input.RankInList;
            questConnection.Notes = input.Notes;
            questConnection.Text  = input.Text;

            // always set this to something, even if it's just empty string
            if (questConnection.ConnectionName == null)
            {
                questConnection.ConnectionName = "-- QUEST CONNECTION NOT NAMED --";
            }

            repo.SaveQuestConnection(questConnection);

            return(questConnection.Id);
        }
        public static void DeleteQuestState(int Id)
        {
            IQuestRepository repo = new EFQuestRepository();
            var questState        = repo.QuestStates.FirstOrDefault(q => q.Id == Id);

            // dangle any from connections connecting TO this state
            var connections = repo.QuestConnections.Where(q => q.QuestStateToId == questState.Id).ToList();

            foreach (var q in connections)
            {
                q.QuestStateToId = -1;
                repo.SaveQuestConnection(q);
            }

            // dangle any from connections connecting TO this state
            connections = repo.QuestConnections.Where(q => q.QuestStateFromId == questState.Id).ToList();
            foreach (var q in connections)
            {
                q.QuestStateFromId = -1;
                repo.SaveQuestConnection(q);
            }

            // delete any ends on this quest state
            var ends = repo.QuestEnds.Where(q => q.QuestStateId.Id == questState.Id).ToList();

            foreach (var q in ends)
            {
                repo.DeleteQuestEnd(q.Id);
            }

            // delete any quest state preactions on this quest state
            var preactions = repo.QuestStatePreactions.Where(q => q.QuestStateId.Id == questState.Id).ToList();

            foreach (var q in preactions)
            {
                repo.DeleteQuestStatePreaction(q.Id);
            }

            // finally actually delete this state
            repo.DeleteQuestState(Id);
        }