﻿#if UNITY_EDITOR

using System;
using UnityEngine;
using UnityEditor;

namespace AC.Downloads.SaveGameScreenshots
{

	public class SaveGameScreenshotsTemplate : Template
	{

		#region Variables

		[SerializeField] private MenuManager menuManager = null;

		#endregion


		#region PublicFunctions

		public override bool CanInstall (ref string errorText)
		{
			if (KickStarter.settingsManager == null)
			{
				errorText = "No Settings Manager assigned";
				return false;
			}

			if (KickStarter.menuManager == null)
			{
				errorText = "No Menu Manager assigned";
				return false;
			}

			if (KickStarter.menuManager == menuManager)
			{
				errorText = "Wrong Menu Manager assigned";
				return false;
			}

			return true;
		}


		public override bool CanSuggest (NGWData data)
		{
			return true;
		}

		#endregion


		#region ProtectedFunctions

		protected override void MakeChanges (string installPath, bool canDeleteOldAssets, System.Action onComplete, System.Action<string> onFail)
		{
			Undo.RecordObjects (new UnityEngine.Object[] { KickStarter.settingsManager, KickStarter.sceneManager, KickStarter.menuManager }, "");

			// Settings
			KickStarter.settingsManager.saveScreenshots = SaveScreenshots.Always;
			EditorUtility.SetDirty (KickStarter.settingsManager);

			// Menu
			CopyMenus (installPath, menuManager, KickStarter.menuManager, canDeleteOldAssets ? ExistingMenuBehaviour.Delete : ExistingMenuBehaviour.Rename);

			onComplete.Invoke ();
		}

		#endregion


		#region GetSet

		public override string Label { get { return "Save-game screenshots"; }}
		public override string PreviewText { get { return "Replaces the default Save and Load menus with ones that display screenshots taken at the time of saving."; }}
		public override Type[] AffectedManagerTypes { get { return new Type[] { typeof (SettingsManager), typeof (MenuManager) }; }}
		public override bool RequiresInstallPath { get { return true; }}
		public override TemplateCategory Category { get { return TemplateCategory.Misc; }}
		public override string FolderName { get { return "SaveGameScreenshots"; }}

		#endregion

	}


	[CustomEditor (typeof (SaveGameScreenshotsTemplate))]
	public class SaveGameScreenshotsTemplateEditor : TemplateEditor
	{}

}

#endif