using System.Collections.Generic;
using UnityEngine.Rendering;

namespace UnityEditor.Rendering
{
    class ProbeVolumeRuntimeResourceStripper : IRenderPipelineGraphicsSettingsStripper<ProbeVolumeRuntimeResources>
    {
        public bool active => true;

        public bool CanRemoveSettings(ProbeVolumeRuntimeResources settings) => !ProbeVolumeGlobalSettingsStripper.ProbeVolumeSupportedForBuild();
    }

    class ProbeVolumeDebugResourceStripper : IRenderPipelineGraphicsSettingsStripper<ProbeVolumeDebugResources>
    {
        public bool active => true;

        public bool CanRemoveSettings(ProbeVolumeDebugResources settings)
        {
            var stripDebugVariants = false;
            if (GraphicsSettings.TryGetRenderPipelineSettings<ShaderStrippingSetting>(out var shaderVariantSettings))
                stripDebugVariants = shaderVariantSettings.stripRuntimeDebugShaders;

            return stripDebugVariants || !ProbeVolumeGlobalSettingsStripper.ProbeVolumeSupportedForBuild();
        }
    }

    class ProbeVolumeBakingResourceStripper : IRenderPipelineGraphicsSettingsStripper<ProbeVolumeBakingResources>
    {
        public bool active => true;

        public bool CanRemoveSettings(ProbeVolumeBakingResources _) => true;
    }

    class ProbeVolumeGlobalSettingsStripper : IRenderPipelineGraphicsSettingsStripper<ProbeVolumeGlobalSettings>
    {
        public bool active => true;

        public bool CanRemoveSettings(ProbeVolumeGlobalSettings settings) => !ProbeVolumeSupportedForBuild();

        public static bool ProbeVolumeSupportedForBuild()
        {
            bool supportProbeVolume = false;

            foreach (var asset in CoreBuildData.instance.renderPipelineAssets)
            {
                if (asset is IProbeVolumeEnabledRenderPipeline probeVolumeEnabledAsset)
                    supportProbeVolume |= probeVolumeEnabledAsset.supportProbeVolume;
            }

            return supportProbeVolume;
        }
    }
}