﻿#if UNITY_EDITOR

using System;
using UnityEngine;
using UnityEditor;

namespace AC.Downloads.ArrangingPuzzle
{

	public class ArrangingPuzzleTemplate : Template
	{

		#region Variables

		[SerializeField] private ArrangingPuzzleManager arrangingPuzzleManagerPrefab = null;
		[SerializeField] private Texture2D puzzleIcon = null;

		#endregion


		#region PublicFunctions

		public override bool CanInstall (ref string errorText)
		{
			if (arrangingPuzzleManagerPrefab == null)
			{
				errorText = "No Arranging Puzzle Manager prefab assigned";
				return false;
			}

			if (KickStarter.sceneManager == null)
			{
				errorText = "No Scene 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.sceneManager, KickStarter.menuManager }, "");

			// Prefab
			ArrangingPuzzleManager newArrangingPuzzleManagerPrefab = CopyAsset<ArrangingPuzzleManager> (installPath, arrangingPuzzleManagerPrefab, ".prefab");
			if (newArrangingPuzzleManagerPrefab == null)
			{
				onFail.Invoke ("Prefab copy failed.");
				return;
			}

			// Scene
			KickStarter.sceneManager.AddPrefab (new SceneManagerPrefabData ("Logic", "Arranging puzzle", "A puzzle involving the arrangement of items in specific slots.", puzzleIcon, newArrangingPuzzleManagerPrefab.gameObject));

			onComplete.Invoke ();
		}

		#endregion


		#region GetSet

		public override string Label { get { return "Arranging puzzle"; }}
		public override string PreviewText { get { return "Adds the ability to create 'Arranging puzzles' - where sprites on the screen need to be placed in certain positions to win."; }}
		public override Type[] AffectedManagerTypes { get { return new Type[] { typeof (SceneManager) }; }}
		public override bool RequiresInstallPath { get { return true; }}
		public override string FolderName { get { return "Arranging Puzzle"; }}

		#endregion

	}


	[CustomEditor (typeof (ArrangingPuzzleTemplate))]
	public class ArrangingPuzzleTemplateEditor : TemplateEditor
	{}

}

#endif