﻿using UnityEngine;
using UnityEditor;
 
public class LuxURPCustomBillboardShaderGUI : ShaderGUI
{
    public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
    {
        base.OnGUI(materialEditor, properties);

    	Material material = materialEditor.target as Material;

        var _Surface = ShaderGUI.FindProperty("_Surface", properties);
        int QueueOffset = material.GetInt("_QueueOffset");
    
    //  Alpha Testing
        if(_Surface.floatValue == 0.0f) {
            material.EnableKeyword("_ALPHATEST_ON");
            material.DisableKeyword("_APPLYFOGADDITIVELY");
            if (material.GetInt("_ApplyFog") == 1) {
                material.EnableKeyword("_APPLYFOG");
                material.DisableKeyword("_APPLYFOGADDITIVELY");    
            }

            material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.AlphaTest + QueueOffset;
            material.SetOverrideTag("RenderType", "TransparentCutout");
            material.SetInt("_ZWrite", 1);

            material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
            material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);

            material.SetShaderPassEnabled("ShadowCaster", true);    
        }

    //  Alpha Blending
        else {
            material.DisableKeyword("_ALPHATEST_ON");

            material.renderQueue = (int) UnityEngine.Rendering.RenderQueue.Transparent + QueueOffset;
            material.SetOverrideTag("RenderType", "Transparent");
            material.SetInt("_ZWrite", 0);
            if (material.GetInt("_Blend") == 0) {
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
                material.DisableKeyword("_APPLYFOGADDITIVELY");
                if (material.GetInt("_ApplyFog") == 1) {
                    material.EnableKeyword("_APPLYFOG");   
                }
                else {
                    material.DisableKeyword("_APPLYFOG"); 
                }
            }
            else if (material.GetInt("_Blend") == 1)  {
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One);
                material.DisableKeyword("_APPLYFOG");
                if (material.GetInt("_ApplyFog") == 1) {
                    material.EnableKeyword("_APPLYFOGADDITIVELY");   
                }
                else {
                    material.DisableKeyword("_APPLYFOGADDITIVELY"); 
                }
            }
            else {
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One);
                material.DisableKeyword("_APPLYFOG");
                if (material.GetInt("_ApplyFog") == 1) {
                    material.EnableKeyword("_APPLYFOGADDITIVELY");   
                }
                else {
                    material.DisableKeyword("_APPLYFOGADDITIVELY"); 
                }
            }

            material.SetShaderPassEnabled("ShadowCaster", false);
        }


    	if (material.HasProperty("_Culling")) {
	    	var _Culling = ShaderGUI.FindProperty("_Culling", properties);
			if(_Culling.floatValue == 0.0f) {
				if (material.doubleSidedGI == false) {
					Debug.Log ("Double Sided Global Illumination enabled.");
				}
        		material.doubleSidedGI = true;
        	}
	    }

    //  Get rid of the normal map issue
        if ( material.HasProperty("_BumpMap") ) {
            if (material.HasProperty("_ApplyNormal") ) {
                if ( material.GetFloat("_ApplyNormal") == 0.0f && material.GetTexture("_BumpMap") == null ) {
                    //material.SetTexture("_BumpMap", Texture2D.normalTexture); // Is not linear?!
                    material.SetTexture("_BumpMap", Resources.Load("LuxURPdefaultBump") as Texture2D );
                }
            }
        }
    }
}