﻿using System;
using System.IO;
using UnityEditor;
using UnityEngine;

namespace Yodo1.FanCraft
{
    public class SDKWindow_Android : EditorWindow
    {
        public const string androidLib = "./Assets/Plugins/Android/FanCraft.androidlib/";
        public const string androidLibRes = androidLib + "/res";

        private FanCraftSettings settings;

        private string Message_Android = "If the Firebase Cloud Message service has already been directly" +
                                         "or indirectly integrated,this setting can be ignored.";

        [MenuItem("Yodo1/FanCraft/Android Setting")]
        public static void Init()
        {
            EditorWindow window = GetWindow(typeof(SDKWindow_Android), false, "Android Setting");
            window.Show();
        }

        public virtual void OnGUI()
        {
            GUIStyle gUIStyle = new GUIStyle();
            gUIStyle.padding = new RectOffset(10, 10, 2, 2);

            GUILayout.BeginVertical(gUIStyle);

            GUIStyle fontStyle = new GUIStyle();
            fontStyle.fontSize = 20;
            fontStyle.normal.textColor = Color.white;
            fontStyle.fontStyle = FontStyle.Bold;
            GUILayout.Label("Push Notifications", fontStyle);

            EditorGUILayout.Separator();

            EditorGUILayout.HelpBox(Message_Android, MessageType.Info);

            EditorGUILayout.Separator();
            settings.notificationSettingsAndroid.Enable = EditorGUILayout.Toggle("Enable Push Notifications",
                settings.notificationSettingsAndroid.Enable);

            EditorGUILayout.Separator();
            if (settings.notificationSettingsAndroid.Enable)
            {
                settings.notificationSettingsAndroid.google_app_id = EditorGUILayout.TextField("google_app_id",
                    settings.notificationSettingsAndroid.google_app_id);
                EditorGUILayout.Separator();
                settings.notificationSettingsAndroid.google_api_key = EditorGUILayout.TextField("google_api_key",
                    settings.notificationSettingsAndroid.google_api_key);
                EditorGUILayout.Separator();
                settings.notificationSettingsAndroid.project_id =
                    EditorGUILayout.TextField("project_id", settings.notificationSettingsAndroid.project_id);
                EditorGUILayout.Separator();
            }

            GUIStyle buttonStyle = new GUIStyle()
            {
                padding = new RectOffset(10, 10, 2, 2)
            };
            GUILayout.BeginVertical(buttonStyle, new GUILayoutOption[0]);
            if (GUILayout.Button("Save Configuration"))
            {
                saveConfig();
            }

            GUILayout.EndVertical();

            GUILayout.EndVertical();
        }

        private void OnEnable()
        {
            settings = SettingsManager.Load();
        }

        private void saveConfig()
        {
            GooglePlay(settings);
            SettingsManager.Save(settings);
        }

        private void OnDisable()
        {
            settings = null;
        }

        public static void GooglePlay(FanCraftSettings settings)
        {
            if (Directory.Exists(androidLib))
            {
                Directory.Delete(androidLib, true);
            }

            if (!settings.notificationSettingsAndroid.Enable)
            {
                return;
            }

            // Update firebase.xml
            string firebase = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                              "<resources>\n" +
                              "    <string name=\"google_app_id\">@yodo1_google_app_id</string>\n" +
                              "    <string name=\"google_api_key\">@yodo1_google_api_key</string>\n" +
                              "    <string name=\"project_id\">@yodo1_project_id</string>\n" +
                              "</resources>";
            firebase = firebase.Replace("@yodo1_google_app_id", settings.notificationSettingsAndroid.google_app_id);
            firebase = firebase.Replace("@yodo1_google_api_key", settings.notificationSettingsAndroid.google_api_key);
            firebase = firebase.Replace("@yodo1_project_id", settings.notificationSettingsAndroid.project_id);
            string manifest = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                              "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" +
                              "    xmlns:tools=\"http://schemas.android.com/tools\"\n" +
                              "    package=\"applicationId\">\n" +
                              "    <application/>\n" +
                              "</manifest>";
            try
            {
                string res = androidLibRes + "/values";
                Directory.CreateDirectory(res);
                File.Create(res + "/firebase.xml").Dispose();
                File.Create(androidLib + "/AndroidManifest.xml").Dispose();

                StreamWriter sr = new StreamWriter(Path.GetFullPath(res) + "/firebase.xml");
                StreamWriter sr1 = new StreamWriter(Path.GetFullPath(androidLib) + "/AndroidManifest.xml");
                sr.Write(firebase);
                sr.Close();
                sr1.Write(manifest);
                sr1.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
    }
}