// Amplify Shader Editor - Visual Shader Editing Tool
// Copyright (c) Amplify Creations, Lda <info@amplify.pt>

using UnityEditor;
using UnityEngine;

namespace AmplifyShaderEditor
{
	public class ConfirmationWindow
	{
		public delegate ShaderLoadResult OnConfirmationSelected( bool value, Shader shader, Material material );
		public event OnConfirmationSelected OnConfirmationSelectedEvt;

		private const string m_yesStr = "Yes";
		private const string m_noStr = "No";
		private bool m_isActive = false;
		private string m_currentMessage;

		private GUIStyle m_areaStyle;
		private GUIContent m_content;
		private GUIStyle m_buttonStyle;
		private GUIStyle m_labelStyle;


		private Shader m_shader;
		private Material m_material;
		private Rect m_area;
		private bool m_autoDeactivate = true;


		public ConfirmationWindow( float x, float y, float width, float height )
		{
			m_content = new GUIContent( GUIContent.none );
			m_area = new Rect( x, y, width, height );
		}

		public void Destroy()
		{
			m_shader = null;
			OnConfirmationSelectedEvt = null;
		}

		public void ActivateConfirmation( Shader shader, Material material, string message, OnConfirmationSelected evt, bool autoDeactivate = true )
		{
			OnConfirmationSelectedEvt = evt;
			m_currentMessage = message;
			m_shader = shader;
			m_material = material;
			m_autoDeactivate = autoDeactivate;
			m_isActive = true;
		}

		public void OnGUI()
		{
			if ( m_areaStyle == null )
			{
				m_areaStyle = new GUIStyle( UIUtils.TextArea );
				m_areaStyle.stretchHeight = true;
				m_areaStyle.stretchWidth = true;
				m_areaStyle.fontSize = ( int ) Constants.DefaultTitleFontSize;
			}

			if ( m_buttonStyle == null )
			{
				m_buttonStyle = UIUtils.Button;
			}

			if ( m_labelStyle == null )
			{
				m_labelStyle = new GUIStyle( UIUtils.Label );
				m_labelStyle.alignment = TextAnchor.MiddleCenter;
				m_labelStyle.wordWrap = true;
			}

			m_area.x = ( int ) ( 0.5f * UIUtils.CurrentWindow.CameraInfo.width );
			m_area.y = ( int ) ( 0.5f * UIUtils.CurrentWindow.CameraInfo.height );

			GUILayout.BeginArea( m_area, m_content, m_areaStyle );
			{
				EditorGUILayout.BeginVertical();
				{
					EditorGUILayout.Separator();
					EditorGUILayout.LabelField( m_currentMessage, m_labelStyle );

					EditorGUILayout.Separator();
					EditorGUILayout.Separator();
					EditorGUILayout.BeginHorizontal();
					{
						if ( GUILayout.Button( m_yesStr, m_buttonStyle ) )
						{
							if ( OnConfirmationSelectedEvt != null )
								OnConfirmationSelectedEvt( true, m_shader, m_material );

							if ( m_autoDeactivate )
								Deactivate();
						}

						if ( GUILayout.Button( m_noStr, m_buttonStyle ) )
						{
							if ( OnConfirmationSelectedEvt != null )
								OnConfirmationSelectedEvt( false, m_shader, m_material );
							if ( m_autoDeactivate )
								Deactivate();
						}
					}
					EditorGUILayout.EndHorizontal();
				}
				EditorGUILayout.EndVertical();
			}
			GUILayout.EndArea();
		}

		public void Deactivate()
		{
			m_isActive = false;
			OnConfirmationSelectedEvt = null;
		}
		public bool IsActive { get { return m_isActive; } }
	}
}