﻿using UnityEditor;
using UnityEngine;
using System.Timers;
using BugseePlugin;

[CustomEditor(typeof(BugseeLauncher))]
public class BugseeLauncherEditor : Editor {

	public BugseeLauncher Launcher;

	int _savePrefabTimer;

	public virtual void OnEnable()
	{
		Launcher = target as BugseeLauncher;
		_savePrefabTimer = -1;
	}

	public override void OnInspectorGUI()
	{
		EditorGUILayout.BeginVertical("Box");

		GUILayout.Space (10);
		Launcher.AppToken  = EditorGUILayout.TextField("Application Token",Launcher.AppToken);

		if(Launcher.AppToken == "your-bugsee-token"){
			EditorGUILayout.HelpBox("Please use your app token provided from http:\\app.bugsee.com", MessageType.Warning);
		}
		EditorGUILayout.EndVertical();

		EditorGUILayout.BeginVertical("Box");

		GUILayout.Space (10);
		Launcher.Endpoint = EditorGUILayout.TextField("Bugsee Endpoint",Launcher.Endpoint);
		if (Launcher.Endpoint != "default"){
			if (GUILayout.Button("Reset to default endpoint")){
				Launcher.Endpoint = "default";
				GUI.FocusControl ("");
			}
		}

		EditorGUILayout.HelpBox("You can use this field to change bugsee server path, plese don't change it if you don't have one", MessageType.Info);
		EditorGUILayout.EndVertical();

		EditorGUILayout.BeginVertical("Box");
		GUILayout.Space (10);
		Launcher.MaxFrameRate = EditorGUILayout.IntSlider("Max Frame Rate",Launcher.MaxFrameRate,0,24);
		EditorGUILayout.HelpBox("With default value 0 it will sets automaticaly for different devices, please don't touch it without nessesary", MessageType.Info);
		EditorGUILayout.EndVertical();

		EditorGUILayout.BeginVertical("Box");
		EditorGUILayout.LabelField ("Options");
		GUILayout.Space (10);
		Launcher.MaxRecordingTime = EditorGUILayout.IntSlider("Max Recording Time",Launcher.MaxRecordingTime,10,300);
		Launcher.ScreenshotToReport = EditorGUILayout.Toggle("Screenshot To Report",Launcher.ScreenshotToReport);
		Launcher.CrashReporting = EditorGUILayout.Toggle("Crash Reporting",Launcher.CrashReporting);
		Launcher.MonitorNetwork = EditorGUILayout.Toggle("Monitor Network",Launcher.MonitorNetwork);
		Launcher.VideoEnabled = EditorGUILayout.Toggle("Video Enabled",Launcher.VideoEnabled);
		Launcher.CaptureLogs = EditorGUILayout.Toggle("Capture Logs",Launcher.CaptureLogs);
		Launcher.Style = (BugseeStyle)EditorGUILayout.EnumPopup("Style",Launcher.Style);
		Launcher.DefaultCrashPriority = (BugseeSeverityLevel)EditorGUILayout.EnumPopup("Default Crash Priority",Launcher.DefaultCrashPriority);
		Launcher.DefaultBugPriority = (BugseeSeverityLevel)EditorGUILayout.EnumPopup("Default Bug Priority",Launcher.DefaultBugPriority);
		Launcher.ShakeToReport = EditorGUILayout.Toggle("Shake To Report",Launcher.ShakeToReport);
		Launcher.ReportPrioritySelector = EditorGUILayout.Toggle("Report Priority Selector",Launcher.ReportPrioritySelector);
		Launcher.KillDetection = EditorGUILayout.Toggle("Kill Detection",Launcher.KillDetection);
		Launcher.EnableMachExceptions = EditorGUILayout.Toggle("Enable Mach Exceptions",Launcher.EnableMachExceptions);

		EditorGUILayout.EndVertical();

		// iOS     - https://docs.bugsee.com/sdk/ios/configuration/
		// Android - https://docs.bugsee.com/sdk/android/configuration/

		EditorGUILayout.BeginVertical("Box");
		EditorGUILayout.LabelField("Learn more about options with official documentation");
		EditorGUILayout.BeginHorizontal ();
		if (GUILayout.Button ("iOS")) {
			Help.BrowseURL("https://docs.bugsee.com/sdk/ios/configuration/");
		}
		if (GUILayout.Button ("Android")) {
			Help.BrowseURL("https://docs.bugsee.com/sdk/android/configuration/");
		}
		EditorGUILayout.EndHorizontal ();
		EditorGUILayout.EndVertical();

		if (GUI.changed && !Application.isPlaying)
		{
			EditorUtility.SetDirty(target);
			_savePrefabTimer = 300;
		}

		if (_savePrefabTimer > 0) {
			_savePrefabTimer--;
		}else if (_savePrefabTimer == 0){
			SavePrefab ();
			_savePrefabTimer = -1;
		}
	}

	private void SavePrefab()
	{
		PrefabUtility.ReplacePrefab( Launcher.gameObject, PrefabUtility.GetPrefabParent( Launcher.gameObject ), ReplacePrefabOptions.ConnectToPrefab);
	}
}
