﻿#if UNITY_EDITOR

namespace Stove.StoveSDK
{
    using System.Collections.Generic;
    using System.IO;
    using UnityEditor;
    using UnityEngine;

    [InitializeOnLoad]
    [CustomEditor(typeof(StoveSettings))]
    public class StoveEditor : Editor
    {

        public StoveEditor()
        {
            StoveSettings.RegisterChangeEventCallback(this.SettingsChanged);
        }

        [MenuItem("Stove/Edit Settings")]
        public static void EditSettings()
        {
            var instance = StoveSettings.NullableInstance;
            if (instance == null)
            {
                instance = CreateInstance<StoveSettings>();
                string properPath = Path.Combine(Application.dataPath, StoveSettings.Path);
                if (!Directory.Exists(properPath))
                {
                    Directory.CreateDirectory(properPath);
                }
                string fullPath = Path.Combine(Path.Combine("Assets", StoveSettings.Path),StoveSettings.AssetName + StoveSettings.AssetExtension);
                AssetDatabase.CreateAsset(instance, fullPath);
            }

            Selection.activeObject = StoveSettings.Instance;
        }

        [MenuItem("Stove/Developers Page")]
        public static void OpenAppPage()
        {
            string url = "https://stove-gitlab.sginfra.net/MVP/mvp-docs/blob/master/README.md/";
            Application.OpenURL(url);
        }

    
        private void StoveSettingsGUI()
        {
            ZoneGUI();
            EditorGUILayout.Space();
            EditorGUILayout.Separator();
            FacebookGUI();
            EditorGUILayout.Separator();
            GoogleGUI();
            EditorGUILayout.Separator();
            NaverGUI();
            EditorGUILayout.Separator();
            LineGUI();
            EditorGUILayout.Separator();
            SteamGUI();
            EditorGUILayout.Separator();
            PushGUI();
            EditorGUILayout.Separator();
            SanctionTypeGUI();
            EditorGUILayout.Separator();
            GooglePlayGamesGUI();
            EditorGUILayout.Separator();
            MarketHuaweiGUI();
            EditorGUILayout.Separator();
        }

        public override void OnInspectorGUI()
        {
            this.StoveSettingsGUI();
        }

        private void SettingsChanged()
        {
            Debug.Log("SettingsChanged " + StoveSettings.Instance);
            EditorUtility.SetDirty(StoveSettings.Instance);
        }

        private void ZoneGUI()
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(new GUIContent("Zone"), GUILayout.Width(135), GUILayout.Height(16));
            StoveSettings.Zone = EditorGUILayout.TextField(StoveSettings.Zone);
            EditorGUILayout.EndHorizontal();
        }

        private void FacebookGUI()
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(new GUIContent("Use Auth-Facebook"), GUILayout.Width(135), GUILayout.Height(16));
            StoveSettings.FacebookEnabled = EditorGUILayout.Toggle(StoveSettings.FacebookEnabled);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Separator();

            if (StoveSettings.FacebookEnabled)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(new GUIContent("AppId"), GUILayout.Width(135), GUILayout.Height(16));
                StoveSettings.FacebookAppId = EditorGUILayout.TextField(StoveSettings.FacebookAppId);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.Separator();

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(new GUIContent("Client Token"), GUILayout.Width(135), GUILayout.Height(16));
                StoveSettings.FacebookClientToken = EditorGUILayout.TextField(StoveSettings.FacebookClientToken);
                EditorGUILayout.EndHorizontal();
            }
        }

        private void GoogleGUI()
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(new GUIContent("Use Auth-Google"), GUILayout.Width(135), GUILayout.Height(16));
            StoveSettings.GoogleEnabled = EditorGUILayout.Toggle(StoveSettings.GoogleEnabled);
            EditorGUILayout.EndHorizontal();

            if (StoveSettings.GoogleEnabled)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(new GUIContent("WebClientId"), GUILayout.Width(135), GUILayout.Height(16));
                StoveSettings.GoogleWebClientId = EditorGUILayout.TextField(StoveSettings.GoogleWebClientId);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.Separator();

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(new GUIContent("WebClientSecret"), GUILayout.Width(135), GUILayout.Height(16));
                StoveSettings.GoogleWebClientSecret = EditorGUILayout.TextField(StoveSettings.GoogleWebClientSecret);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.Separator();

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(new GUIContent("iOSClientId"), GUILayout.Width(135), GUILayout.Height(16));
                StoveSettings.GoogleIosClientId = EditorGUILayout.TextField(StoveSettings.GoogleIosClientId);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.Separator();

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(new GUIContent("iOSUrlScheme"), GUILayout.Width(135), GUILayout.Height(16));
                StoveSettings.GoogleIosUrlScheme = EditorGUILayout.TextField(StoveSettings.GoogleIosUrlScheme);
                EditorGUILayout.EndHorizontal();
            }
        }

        private void GooglePlayGamesGUI()
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(new GUIContent("Use Auth-GooglePlayGames"), GUILayout.Width(135), GUILayout.Height(16));
            StoveSettings.GooglePlayGamesEnabled = EditorGUILayout.Toggle(StoveSettings.GooglePlayGamesEnabled);
            EditorGUILayout.EndHorizontal();

            if (StoveSettings.GooglePlayGamesEnabled)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(new GUIContent("ProjectId"), GUILayout.Width(135), GUILayout.Height(16));
                StoveSettings.GooglePlayGamesProjectId = EditorGUILayout.TextField(StoveSettings.GooglePlayGamesProjectId);
                EditorGUILayout.EndHorizontal();
            }
        }

        private void NaverGUI()
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(new GUIContent("Use Auth-Naver"), GUILayout.Width(135), GUILayout.Height(16));
            StoveSettings.NaverEnabled = EditorGUILayout.Toggle(StoveSettings.NaverEnabled);
            EditorGUILayout.EndHorizontal();

            if (StoveSettings.NaverEnabled)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(new GUIContent("ClientId"), GUILayout.Width(135), GUILayout.Height(16));
                StoveSettings.NaverClientId = EditorGUILayout.TextField(StoveSettings.NaverClientId);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.Separator();

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(new GUIContent("ClientSecret"), GUILayout.Width(135), GUILayout.Height(16));
                StoveSettings.NaverClientSecret = EditorGUILayout.TextField(StoveSettings.NaverClientSecret);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.Separator();

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(new GUIContent("ClientName"), GUILayout.Width(135), GUILayout.Height(16));
                StoveSettings.NaverClientName = EditorGUILayout.TextField(StoveSettings.NaverClientName);
                EditorGUILayout.EndHorizontal();

            }
        }
        private void LineGUI()
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(new GUIContent("Use Auth-Line"), GUILayout.Width(135), GUILayout.Height(16));
            StoveSettings.LineEnabled = EditorGUILayout.Toggle(StoveSettings.LineEnabled);
            EditorGUILayout.EndHorizontal();

            if (StoveSettings.LineEnabled)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(new GUIContent("channelId"), GUILayout.Width(135), GUILayout.Height(16));
                StoveSettings.LineChannelId = EditorGUILayout.TextField(StoveSettings.LineChannelId);
                EditorGUILayout.EndHorizontal();
            }
        }

        private void SteamGUI()
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(new GUIContent("Use Auth-Steam"), GUILayout.Width(135), GUILayout.Height(16));
            StoveSettings.SteamEnabled = EditorGUILayout.Toggle(StoveSettings.SteamEnabled);
            EditorGUILayout.EndHorizontal();
        }

        private void PushGUI()
        {
            EditorGUILayout.LabelField(new GUIContent("Android Push"), GUILayout.Width(230), GUILayout.Height(16));

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(new GUIContent("Foreground Notificatoin Enabled"), GUILayout.Width(180), GUILayout.Height(16));
            StoveSettings.ForegroundNotificatoinEnabled = EditorGUILayout.Toggle(StoveSettings.ForegroundNotificatoinEnabled);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Separator();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(new GUIContent("HeadsUp Notification Enabled"), GUILayout.Width(180), GUILayout.Height(16));
            StoveSettings.HeadsUpNotificationEnabled = EditorGUILayout.Toggle(StoveSettings.HeadsUpNotificationEnabled);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Separator();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(new GUIContent("Use Custom Channel"), GUILayout.Width(135), GUILayout.Height(16));
            StoveSettings.CustomChannelEnabled = EditorGUILayout.Toggle(StoveSettings.CustomChannelEnabled);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Separator();

            if (StoveSettings.CustomChannelEnabled)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(new GUIContent("ChannelName"), GUILayout.Width(135), GUILayout.Height(16));
                StoveSettings.PushChannelName = EditorGUILayout.TextField(StoveSettings.PushChannelName);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.Separator();

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(new GUIContent("ChannelDescription"), GUILayout.Width(135), GUILayout.Height(16));
                StoveSettings.PushChannelDescription = EditorGUILayout.TextField(StoveSettings.PushChannelDescription);
                EditorGUILayout.EndHorizontal();
            }

            EditorGUILayout.Separator();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(new GUIContent("SmallIcon"), GUILayout.Width(135), GUILayout.Height(16));
            StoveSettings.PushSmallIcon = EditorGUILayout.TextField(StoveSettings.PushSmallIcon);
            EditorGUILayout.EndHorizontal();
        }

        private void SanctionTypeGUI()
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(new GUIContent("Use SanctionType"), GUILayout.Width(135), GUILayout.Height(16));
            StoveSettings.SanctionType = EditorGUILayout.Toggle(StoveSettings.SanctionType);
            EditorGUILayout.EndHorizontal();
        }

        private void MarketHuaweiGUI()
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(new GUIContent("Use Market-Huawei"), GUILayout.Width(135), GUILayout.Height(16));
            StoveSettings.MarketHuaweiEnabled = EditorGUILayout.Toggle(StoveSettings.MarketHuaweiEnabled);
            EditorGUILayout.EndHorizontal();

            if (StoveSettings.MarketHuaweiEnabled)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(new GUIContent("AppId"), GUILayout.Width(135), GUILayout.Height(16));
                StoveSettings.HuaweiAppId = EditorGUILayout.TextField(StoveSettings.HuaweiAppId);
                EditorGUILayout.EndHorizontal();
            }
        }
    }
}
#endif
