using System;
using System.Collections.Generic;

namespace UnityEngine.Rendering
{
    /// <summary>
    /// Display stats panel
    /// </summary>
    /// <typeparam name="TProfileId">Type of ProfileId the pipeline uses</typeparam>
    public class DebugDisplaySettingsStats<TProfileId> : IDebugDisplaySettingsData
        where TProfileId : Enum
    {
        /// <summary>Current display stats</summary>
        public DebugDisplayStats<TProfileId> debugDisplayStats { get; }

        /// <summary>
        /// Display stats panel constructor with settings
        /// </summary>
        /// <param name="debugDisplayStats">The debug display stats object that is used for configuring settings in the stats panel.</param>
        public DebugDisplaySettingsStats(DebugDisplayStats<TProfileId> debugDisplayStats)
        {
            this.debugDisplayStats = debugDisplayStats;
        }

        [DisplayInfo(name = "Display Stats", order = int.MinValue)]
        private class StatsPanel : DebugDisplaySettingsPanel
        {
            readonly DebugDisplaySettingsStats<TProfileId> m_Data;

            public override DebugUI.Flags Flags => DebugUI.Flags.RuntimeOnly;

            public StatsPanel(DebugDisplaySettingsStats<TProfileId> displaySettingsStats)
            {
                m_Data = displaySettingsStats;

                m_Data.debugDisplayStats.EnableProfilingRecorders();

                var list = new List<DebugUI.Widget>();
                m_Data.debugDisplayStats.RegisterDebugUI(list);

                foreach (var w in list)
                    AddWidget(w);
            }

            public override void Dispose()
            {
                m_Data.debugDisplayStats.DisableProfilingRecorders();
                base.Dispose();
            }
        }

        /// <inheritdoc/>
        public bool AreAnySettingsActive => false;

        /// <inheritdoc/>
        public IDebugDisplaySettingsPanelDisposable CreatePanel()
        {
            return new StatsPanel(this);
        }
    }
}