#if GRIFFIN
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

namespace Pinwheel.Griffin.Rendering
{
    public static class GGrassMaterialProvider
    {
        public const string FADE_KW = "FADE";

        public static Material GetMaterial(bool isInteractiveGrassEnabled, bool isBillboardEnabled)
        {
            Material mat;
            if (isInteractiveGrassEnabled)
            {
                mat = GetInteractiveGrassMaterial();
            }
            else
            {
                mat = GetNonInteractiveGrassMaterial(isBillboardEnabled);
            }
            if (mat != null)
            {
                mat.EnableKeyword(FADE_KW);
            }
            return mat;
        }

        private static Material GetInteractiveGrassMaterial()
        {
            GRenderPipelineType pipeline = GCommon.CurrentRenderPipeline;
            if (pipeline == GRenderPipelineType.Builtin)
            {
                return GRuntimeSettings.Instance.foliageRendering.grassInteractiveMaterial;
            }
            else if (pipeline == GRenderPipelineType.Universal)
            {
                return GRuntimeSettings.Instance.foliageRendering.urpGrassInteractiveMaterial;
            }
            else
            {
                return null;
            }
        }

        private static Material GetNonInteractiveGrassMaterial(bool isBillboardEnabled)
        {
            if (isBillboardEnabled)
            {
                return GetNonInteractiveBillboardGrassMaterial();
            }
            else
            {
                return GetNonInteractiveNonBillboardGrassMaterial();
            }
        }

        private static Material GetNonInteractiveNonBillboardGrassMaterial()
        {
            GRenderPipelineType pipeline = GCommon.CurrentRenderPipeline;
            if (pipeline == GRenderPipelineType.Builtin)
            {
                return GRuntimeSettings.Instance.foliageRendering.grassMaterial;
            }
            else if (pipeline == GRenderPipelineType.Universal)
            {
                return GRuntimeSettings.Instance.foliageRendering.urpGrassMaterial;
            }
            else
            {
                return null;
            }
        }

        private static Material GetNonInteractiveBillboardGrassMaterial()
        {
            GRenderPipelineType pipeline = GCommon.CurrentRenderPipeline;
            if (pipeline == GRenderPipelineType.Builtin)
            {
                return GRuntimeSettings.Instance.foliageRendering.grassBillboardMaterial;
            }
            else if (pipeline == GRenderPipelineType.Universal)
            {
                return GRuntimeSettings.Instance.foliageRendering.urpGrassBillboardMaterial;
            }
            else
            {
                return null;
            }
        }
    }
}
#endif