// Copyright (c) Umbraco.
// See LICENSE for more details.

using System;
using StackExchange.Profiling;
using StackExchange.Profiling.SqlFormatters;
using Umbraco.Cms.Core.Logging;

namespace Umbraco.Cms.Tests.Common.TestHelpers.Stubs
{
    public class TestProfiler : IProfiler
    {
        public static void Enable() => s_enabled = true;

        public static void Disable() => s_enabled = false;

        private static bool s_enabled;

        public IDisposable Step(string name) => s_enabled ? MiniProfiler.Current.Step(name) : null;

        public void Start()
        {
            if (s_enabled == false)
            {
                return;
            }

            // See https://miniprofiler.com/dotnet/AspDotNet
            MiniProfiler.Configure(new MiniProfilerOptions
            {
                SqlFormatter = new SqlServerFormatter(),
                StackMaxLength = 5000,
            });

            MiniProfiler.StartNew();
        }

        public void Stop(bool discardResults = false)
        {
            if (s_enabled)
            {
                MiniProfiler.Current.Stop(discardResults);
            }
        }
    }
}
