using System;
using System.Diagnostics;
using System.Threading;
using NLog;

namespace NzbDrone.Providers
{
    [DebuggerStepThroughAttribute]
    public class DebuggerProvider
    {
        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();


        public virtual void Attach()
        {
#if DEBUG
            if (Debugger.IsAttached)
            {
                Logger.Info("Trying to attach to debugger");

                int count = 0;

                while (true)
                {
                    try
                    {
                        ProcessAttacher.Attach();
                        Logger.Info("Debugger Attached");
                        return;
                    }
                    catch (Exception e)
                    {
                        count++;
                        if (count > 20)
                        {
                            Logger.WarnException("Unable to attach to debugger", e);
                            return;
                        }

                        Thread.Sleep(100);
                    }
                }
            }
#endif
        }
    }
}