﻿#if UNITY_EDITOR

using System;
using UnityEngine;
using UnityEditor;

namespace AC.Downloads.IsometricCamera
{

	public class IsometricCameraTemplate : Template
	{

		#region Variables

		[SerializeField] private Texture2D cameraIcon = null;
		[SerializeField] private GameCameraIso cameraIsoPrefab = null;

		#endregion


		#region PublicFunctions

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

			if (cameraIsoPrefab == null)
			{
				errorText = "No camera prefab 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.sceneManager }, "");

			// Prefab
			GameCameraIso newCameraIsoPrefab = CopyAsset<GameCameraIso> (installPath, cameraIsoPrefab, ".prefab");
			if (newCameraIsoPrefab == null)
			{
				onFail.Invoke ("Prefab copy failed.");
				return;
			}

			// Scene
			KickStarter.sceneManager.AddPrefab (new SceneManagerPrefabData ("Camera", "GameCamera Iso", "An isometric camera.", cameraIcon, newCameraIsoPrefab.gameObject));

			onComplete.Invoke ();
		}
		
		#endregion


		#region GetSet

		public override string Label { get { return "Isometric camera"; }}
		public override string PreviewText { get { return "Adds an isometric camera type to the Scene Manager."; }}
		public override Type[] AffectedManagerTypes { get { return new Type[] { typeof (SceneManager) }; }}
		public override bool RequiresInstallPath { get { return true; }}
		public override string FolderName { get { return "IsometricCamera"; }}

		#endregion

	}


	[CustomEditor (typeof (IsometricCameraTemplate))]
	public class IsometricCameraTemplateEditor : TemplateEditor
	{}

}

#endif