using System.Linq;
using UnityEditor.ShaderGraph.Internal;

namespace UnityEditor.ShaderGraph
{
    static class IConditionalExtensions
    {
        public static bool TestActive(this IConditional conditional, ActiveFields fields)
        {
            // Test FieldCondition against current active Fields
            bool TestFieldCondition(FieldCondition fieldCondition)
            {
                // Required active field is not active
                if (fieldCondition.condition == true && !fields.baseInstance.Contains(fieldCondition.field))
                    return false;

                // Required non-active field is active
                else if (fieldCondition.condition == false && fields.baseInstance.Contains(fieldCondition.field))
                    return false;

                return true;
            }

            // No FieldConditions
            if (conditional.fieldConditions == null)
                return true;

            // One or more FieldConditions failed
            if (conditional.fieldConditions.Where(x => !TestFieldCondition(x)).Any())
                return false;

            // All FieldConditions passed
            return true;
        }
    }
}