﻿#if UNITY_EDITOR

using System;
using UnityEngine;
using UnityEditor;

namespace AC.Downloads.ConvCamera
{
	
	public class ConversationCameraTemplate : Template
	{

		#region Variables

		[SerializeField] private Texture2D cameraIcon = null;
		[SerializeField] private ConversationCamera cameraPrefab = null;

		#endregion


		#region PublicFunctions

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

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

			// Prefab
			ConversationCamera newCameraPrefab = CopyAsset<ConversationCamera> (installPath, cameraPrefab, ".prefab");
			if (newCameraPrefab == null)
			{
				onFail.Invoke ("Prefab copy failed.");
				return;
			}

			// Scene
			KickStarter.sceneManager.AddPrefab (new SceneManagerPrefabData ("Camera", "Conversation", "A camera rig intended for framing a conversation between two characters.", cameraIcon, newCameraPrefab.gameObject));

			onComplete.Invoke ();
		}

		#endregion


		#region GetSet

		public override string Label { get { return "Conversation camera"; }}
		public override string PreviewText { get { return "Provides a means to automatically cut between two characters dynamically when talking to one another."; }}
		public override Type[] AffectedManagerTypes { get { return new Type[] { typeof (SceneManager) }; }}
		public override bool RequiresInstallPath { get { return true; }}
		public override string FolderName { get { return "ConversationCamera"; }}
		public override TemplateCategory Category { get { return TemplateCategory.Misc; }}

		#endregion

	}


	[CustomEditor (typeof (ConversationCameraTemplate))]
	public class ConversationCameraTemplateEditor : TemplateEditor
	{}

}

#endif