using UnityEngine;
namespace SRDebugger
{
    public delegate void VisibilityChangedDelegate(bool isVisible);
    public delegate void ActionCompleteCallback(bool success);
    public delegate void PinnedUiCanvasCreated(RectTransform canvasTransform);
}
namespace SRDebugger.Services
{
    using UnityEngine;
    public interface IDebugService
    {
        /// 
        /// Current settings being used by the debugger
        /// 
        Settings Settings { get; }
        /// 
        /// True if the debug panel is currently being shown
        /// 
        bool IsDebugPanelVisible { get; }
        /// 
        /// True if the trigger is currently enabled
        /// 
        bool IsTriggerEnabled { get; set; }
        IDockConsoleService DockConsole { get; }
        bool IsProfilerDocked { get; set; }
        /// 
        /// Add  to the system information tab. See  for how to create
        /// an info instance.
        /// 
        /// The entry to be added.
        /// The category the entry should be added to.
        void AddSystemInfo(InfoEntry entry, string category = "Default");
        /// 
        /// Show the debug panel
        /// 
        /// 
        /// If true and entry code is enabled in settings, the user will be prompted for a passcode
        /// before opening the panel.
        /// 
        void ShowDebugPanel(bool requireEntryCode = true);
        /// 
        /// Show the debug panel and open a certain tab
        /// 
        /// Tab that will appear when the debug panel is opened
        /// 
        /// If true and entry code is enabled in settings, the user will be prompted for a passcode
        /// before opening the panel.
        /// 
        void ShowDebugPanel(DefaultTabs tab, bool requireEntryCode = true);
        /// 
        /// Hide the debug panel
        /// 
        void HideDebugPanel();
        /// 
        /// Hide the debug panel, then remove it from the scene to save memory.
        /// 
        void DestroyDebugPanel();
        /// 
        /// Add all an objects compatible properties and methods to the options panel.
        /// NOTE: It is not recommended to use this on a MonoBehaviour, it should be used on a standard
        /// class made specifically for use as a settings object.
        /// 
        /// The object to add.
        void AddOptionContainer(object container);
        
        /// 
        /// Remove all properties and methods that the  added to the options panel.
        /// 
        /// The container to remove.
        void RemoveOptionContainer(object container);
        /// 
        /// Pin all options in a category.
        /// 
        /// 
        void PinAllOptions(string category);
        /// 
        /// Unpin all options in a category.
        /// 
        /// 
        void UnpinAllOptions(string category);
        void PinOption(string name);
        void UnpinOption(string name);
        /// 
        /// Clear all pinned options.
        /// 
        void ClearPinnedOptions();
        /// 
        /// Open a bug report sheet.
        /// 
        /// Callback to invoke once the bug report is completed or cancelled. Null to ignore.
        /// 
        /// Take a screenshot before opening the report sheet (otherwise a screenshot will be taken as
        /// the report is sent)
        /// 
        /// Initial content of the bug report description
        void ShowBugReportSheet(ActionCompleteCallback onComplete = null, bool takeScreenshot = true,
            string descriptionContent = null);
        /// 
        /// Event invoked whenever the debug panel opens or closes
        /// 
        event VisibilityChangedDelegate PanelVisibilityChanged;
        event PinnedUiCanvasCreated PinnedUiCanvasCreated;
        /// 
        /// ADVANCED FEATURE. This will convert the debug panel to a world space object and return the RectTransform.
        /// This can be used to position the SRDebugger panel somewhere in your scene.
        /// This feature is for advanced users online who know what they are doing. Only limited support will be provided
        /// for this method.
        /// The debug panel will be made visible if it is not already.
        /// 
        /// The debug panel RectTransform.
        RectTransform EnableWorldSpaceMode();
    }
}