/// <summary>
        ///     상태를 추가한다.
        /// </summary>
        private void AddState()
        {
            var state          = new List <SwitchComponentData>();
            var stateComponent = new SwitchComponentData();

            stateComponent.Operator = string.Empty;
            state.Add(stateComponent);
            _stateList.Add(state);

            var stateResultData = new SwitchStateResultData();

            _stateResultDataList.Add(stateResultData);
        }
        /// <summary>
        ///     창을 그리는 행동
        /// </summary>
        protected override void GUIProcess()
        {
            //로고
            GUILayout.Space(10);

            GUILayout.Label(WindowTitleText, "DefaultCenteredLargeText");

            GUILayout.Space(10);

            EditorGUI.BeginDisabledGroup(_confirmState != EConfirmState.None);
            {
                Rect areaRect = position;
                areaRect.height = position.height * 0.8f;

                //스위치 아이디
                GUILayout.BeginHorizontal();
                {
                    EditorGUI.BeginDisabledGroup(IsUpdate);
                    {
                        EditorGUILayout.PrefixLabel(SwitchIdText);
                        _descriptionData.SwitchId = GUILayout.TextField(_descriptionData.SwitchId);
                    }
                    EditorGUI.EndDisabledGroup();
                }
                GUILayout.EndHorizontal();

                //시작결과
                GUILayout.BeginHorizontal(GUILayout.Width(150));
                GUILayout.Space(position.width * 0.5f - 75);
                GUILayout.BeginVertical();
                GUILayout.Space(18);
                GUILayout.Label(StartResultText);
                GUILayout.EndVertical();
                var defaultResultText = _descriptionData.DefaultResult.ToString();
                if (GUILayout.Button(defaultResultText, "GroupBox", GUILayout.Width(100)))
                {
                    _descriptionData.DefaultResult = !_descriptionData.DefaultResult;
                }
                GUILayout.EndHorizontal();

                //스위치 설명
                GUILayout.Space(10);
                GUILayout.Label(DescriptionTextValue);
                _descriptionData.Description = GUILayout.TextArea(_descriptionData.Description, GUILayout.Height(100));


                //
                //
                //
                //

                GUILayout.Space(15);

                //팝업내용 만들기
                string[] popupTexts = new string[_stateList.Count + 1];
                int      stateIndex = 0;
                for (stateIndex = 0; stateIndex < _stateList.Count; ++stateIndex)
                {
                    popupTexts[stateIndex] = string.Format(StateFormatText, stateIndex);
                }
                popupTexts[stateIndex] = string.Format(StateAddFormatText, stateIndex);

                //팝업드랍박스
                GUILayout.BeginHorizontal();
                _stateIndex = EditorGUILayout.Popup(_stateIndex, popupTexts);
                if (_stateList.Count == _stateIndex)
                {
                    AddState();
                }

                //현재 상태 삭제하기
                EditorGUI.BeginDisabledGroup(_stateIndex == 0);
                {
                    if (GUILayout.Button(DeleteStateText, GUILayout.Width(120)))
                    {
                        _stateList.Remove(_stateList[_stateIndex]);
                        if (_stateList.Count <= _stateIndex)
                        {
                            _stateIndex = _stateList.Count - 1;
                        }
                        _stateResultDataList.Remove(_stateResultDataList[_stateIndex]);
                    }
                }
                EditorGUI.EndDisabledGroup();
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal(GUILayout.Width(150));
                GUILayout.Space(position.width * 0.5f - 75);
                GUILayout.BeginVertical();
                GUILayout.Space(18);
                GUILayout.Label(StateResultText);
                GUILayout.EndVertical();
                var resultText = _stateResultDataList[_stateIndex].Result.ToString();
                if (GUILayout.Button(resultText, "GroupBox", GUILayout.Width(100)))
                {
                    _stateResultDataList[_stateIndex].Result = !_stateResultDataList[_stateIndex].Result;
                }
                GUILayout.EndHorizontal();

                GUILayout.Space(20);

                GUILayout.BeginVertical(GUILayout.Height(position.height - 362));

                //디폴트 퀘스트아이디 인풋
                _stateList[_stateIndex][0].QuestId = EditorGUILayout.TextField(QuestIdText, _stateList[_stateIndex][0].QuestId);
                //추가 인풋
                for (int stateComponentIndex = 1; stateComponentIndex < _stateList[_stateIndex].Count; ++stateComponentIndex)
                {
                    GUILayout.BeginHorizontal();
                    int operIndex = _stateList[_stateIndex][stateComponentIndex].Operator == _operTexts[0] ? 0 : 1;
                    operIndex = EditorGUILayout.Popup(operIndex, _operTexts, GUILayout.Width(148));
                    _stateList[_stateIndex][stateComponentIndex].Operator = _operTexts[operIndex];
                    _stateList[_stateIndex][stateComponentIndex].QuestId  = EditorGUILayout.TextField(_stateList[_stateIndex][stateComponentIndex].QuestId);
                    GUILayout.Space(10);
                    if (GUILayout.Button(string.Empty, "OL Minus", GUILayout.Width(20)))
                    {
                        _stateList[_stateIndex].Remove(_stateList[_stateIndex][stateComponentIndex]);
                    }
                    GUILayout.Space(15);
                    GUILayout.EndHorizontal();
                    GUILayout.Space(4);
                }
                //퀘스트아이디 추가 버튼
                if (GUILayout.Button(AddOperText))
                {
                    var switchComponent = new SwitchComponentData();
                    switchComponent.Operator = _operTexts[0];
                    _stateList[_stateIndex].Add(switchComponent);
                }

                GUILayout.EndVertical();

                GUILayout.BeginHorizontal();
                GUILayout.Space(position.width * 0.2f);
                //버튼 기능
                if (IsUpdate)
                {
                    if (GUILayout.Button(UpdateTextValue))
                    {
                        if (CheckProcess() && UpdateProcess())
                        {
                            _confirmState           = EConfirmState.UpdateSuccess;
                            ConfirmWindowNoticeText = UpdateSuccessTextValue;
                        }
                        else
                        {
                            _confirmState           = EConfirmState.Fail;
                            ConfirmWindowNoticeText = UpdateFailTextValue;
                        }
                    }
                    if (GUILayout.Button(DeleteTextValue))
                    {
                        //SwitchData 구성요소인지 체크
                        if (DeleteProcess())
                        {
                            _confirmState           = EConfirmState.DeleteSuccess;
                            ConfirmWindowNoticeText = DeleteSuccessTextValue;
                        }
                        else
                        {
                            _confirmState           = EConfirmState.Fail;
                            ConfirmWindowNoticeText = DeleteFaileTextValue;
                        }
                    }
                }
                else
                {
                    if (GUILayout.Button(CreateTextValue))
                    {
                        if (CheckProcess() && CreateProcess())
                        {
                            _confirmState           = EConfirmState.CreateSuccess;
                            ConfirmWindowNoticeText = CreateSuccessTextValue;
                        }
                        else
                        {
                            _confirmState           = EConfirmState.Fail;
                            ConfirmWindowNoticeText = CreateFailTextValue;
                        }
                    }
                }
                GUILayout.Space(position.width * 0.2f);
                GUILayout.EndHorizontal();
            }
            EditorGUI.EndDisabledGroup();

            if (_confirmState != EConfirmState.None)
            {
                DrawConfirmWindow(string.Empty);
            }

            GUILayout.Space(10);
        }