﻿#if UNITY_EDITOR

using System;
using UnityEngine;
using UnityEditor;

namespace AC.Downloads.WalkingDead
{

	public class WalkingDeadTemplate : Template
	{

		#region Variables

		[SerializeField] private CursorManager defaultCursorManager = null;
		[SerializeField] private MenuManager defaultMenuManager = null;
		[SerializeField] private Texture2D iconTexture = 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 || defaultMenuManager == null)
			{
				errorText = "No Menu Manager assigned";
				return false;
			}

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

			if (KickStarter.cursorManager == null || defaultCursorManager == null)
			{
				errorText = "No Cursor Manager assigned";
				return false;
			}

			if (KickStarter.cursorManager == defaultCursorManager)
			{
				errorText = "Wrong Cursor Manager assigned";
				return false;
			}

			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.cursorManager, KickStarter.menuManager }, "");

			// Settings
			KickStarter.settingsManager.movementMethod = MovementMethod.Direct;
			KickStarter.settingsManager.inputMethod = InputMethod.MouseAndKeyboard;
			KickStarter.settingsManager.interactionMethod = AC_InteractionMethod.ChooseHotspotThenInteraction;
			KickStarter.settingsManager.selectInteractions = SelectInteractions.ClickingMenu;
			KickStarter.settingsManager.seeInteractions = SeeInteractions.CursorOverHotspot;
			KickStarter.settingsManager.autoHideInteractionIcons = true;
			KickStarter.settingsManager.cancelInteractions = CancelInteractions.CursorLeavesMenuOrHotspot;
			KickStarter.settingsManager.alwaysCloseInteractionMenus = true;
			KickStarter.settingsManager.lockCursorOnStart = false;
			KickStarter.settingsManager.inventoryInteractions = InventoryInteractions.Single;
			KickStarter.settingsManager.cycleInventoryCursors = true;
			KickStarter.settingsManager.InventoryDragDrop = false;
			KickStarter.settingsManager.rightClickInventory = RightClickInventory.DeselectsItem;
			KickStarter.settingsManager.inventoryDisableLeft = true;
			KickStarter.settingsManager.hotspotDetection = HotspotDetection.MouseOver;
			KickStarter.settingsManager.scaleHighlightWithMouseProximity = true;
			KickStarter.settingsManager.hotspotIconGraphic.size = 0.02f;
			KickStarter.settingsManager.occludeIcons = true;
			KickStarter.settingsManager.highlightProximityFactor = 4f;
			KickStarter.settingsManager.hotspotIconDisplay = HotspotIconDisplay.OnlyWhenHighlighting;
			KickStarter.settingsManager.hotspotIcon = HotspotIcon.Texture;
			KickStarter.settingsManager.hotspotIconGraphic.texture = iconTexture;
			KickStarter.settingsManager.hotspotIconSize = 0.0125f;

			// Cursor
			KickStarter.cursorManager.addHotspotPrefix = true;
			KickStarter.cursorManager.inventoryHandling = InventoryHandling.ChangeCursor;
			KickStarter.cursorManager.onlyShowInventoryLabelOverHotspots = false;
			KickStarter.cursorManager.allowInteractionCursor = false;
			KickStarter.cursorManager.cursorIcons.Clear ();

			foreach (CursorIcon defaultIcon in defaultCursorManager.cursorIcons)
			{
				CursorIcon newIcon = new CursorIcon ();
				newIcon.Copy (defaultIcon, false);
				KickStarter.cursorManager.cursorIcons.Add (newIcon);
			}
			KickStarter.cursorManager.SyncCursorInteractions ();

			EditorUtility.SetDirty (KickStarter.cursorManager);

			// Menu
			RemoveExistingMenu ("Subtitles", !canDeleteOldAssets);
			RemoveExistingMenu ("Hotspot", !canDeleteOldAssets);
			RemoveExistingMenu ("Interaction", !canDeleteOldAssets);
			RemoveExistingMenu ("Inventory", !canDeleteOldAssets);
			RemoveExistingMenu ("Conversation", !canDeleteOldAssets);
			CopyMenus (installPath, defaultMenuManager, KickStarter.menuManager);
			
			onComplete.Invoke ();
		}

		#endregion
		

		#region GetSet

		public override string Label { get { return "Walking Dead interface"; }}
		public override string PreviewText { get { return "Adds a interface that emulates the style of Telltale Games' Walking Dead series."; }}
		public override Type[] AffectedManagerTypes { get { return new Type[] { typeof (SettingsManager), typeof (CursorManager), typeof (MenuManager) }; }}
		public override bool RequiresInstallPath { get { return true; }}
		public override string FolderName { get { return "WalkingDead"; }}

		#endregion

	}


	[CustomEditor (typeof (WalkingDeadTemplate))]
	public class WalkingDeadTemplateEditor : TemplateEditor
	{}

}

#endif