public static int SaveQuestState(QuestState input)
        {
            IQuestRepository repo = new EFQuestRepository();

            var questState = repo.QuestStates.FirstOrDefault(q => q.Id == input.Id);

            if (questState == null)
            {
                questState = new QuestState();
            }

            questState.Id                       = input.Id;
            questState.QuestEndId               = input.QuestEndId;
            questState.QuestStateName           = input.QuestStateName;
            questState.Text                     = input.Text;
            questState.QuestId                  = input.QuestId;
            questState.HideIfRequirementsNotMet = input.HideIfRequirementsNotMet;
            questState.Notes                    = input.Notes;
            questState.PinToDiagram             = input.PinToDiagram;
            questState.X = input.X;
            questState.Y = input.Y;

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

            repo.SaveQuestState(questState);

            return(questState.Id);
        }
        public virtual JsonResult DiagramSaveNodePosition(int Id, string X, string Y)
        {
            IQuestRepository repo = new EFQuestRepository();

            var state = repo.QuestStates.FirstOrDefault(q => q.Id == Id);

            state.PinToDiagram = true;
            state.X            = float.Parse(X);
            state.Y            = float.Parse(Y);
            repo.SaveQuestState(state);

            var output = "Pinned state " + Id;

            return(Json(output, JsonRequestBehavior.AllowGet));
        }
        public static int SaveQuestStart(QuestStart input)
        {
            IQuestRepository repo = new EFQuestRepository();

            var questStart = repo.QuestStarts.FirstOrDefault(q => q.Id == input.Id);
            var questState = repo.QuestStates.FirstOrDefault(q => q.QuestId == input.Id);

            var newStart = false;

            if (questStart == null)
            {
                questStart = new QuestStart();
                newStart   = true;
            }
            questStart.dbName            = input.dbName;
            questStart.Location          = input.Location;
            questStart.MaxStartLevel     = input.MaxStartLevel;
            questStart.MaxStartTurn      = input.MaxStartTurn;
            questStart.MinStartLevel     = input.MinStartLevel;
            questStart.MinStartTurn      = input.MinStartTurn;
            questStart.Name              = input.Name;
            questStart.PrerequisiteQuest = input.PrerequisiteQuest;
            questStart.RequiredGender    = input.RequiredGender;
            questStart.StartState        = input.StartState;
            questStart.Tags              = input.Tags;
            questStart.Description       = input.Description;

            repo.SaveQuestStart(questStart);

            // save an additional quest state to start this off
            if (newStart || questState == null)
            {
                questState = new QuestState
                {
                    QuestId        = questStart.Id,
                    QuestStateName = "[ STARTING QUEST STATE ]",
                };
                repo.SaveQuestState(questState);

                questStart.StartState = questState.Id;
                repo.SaveQuestStart(questStart);
            }



            return(questStart.Id);
        }