using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;

namespace Decal.Interop.DHS;

[ComImport]
[SuppressUnmanagedCodeSecurity]
[Guid("85C12F39-FD37-4E70-982A-3973FA6D376B")]
[TypeLibType(4160)]
public interface IHotkeySystem
{
	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1)]
	void AddHotkey([In][MarshalAs(UnmanagedType.BStr)] string szPlugin, [In][MarshalAs(UnmanagedType.Interface)] Hotkey pHotkey);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(2)]
	bool QueryHotkey([In][MarshalAs(UnmanagedType.BStr)] string bstrTitle);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(3)]
	void Connect([In][MarshalAs(UnmanagedType.IUnknown)] object pPlugin);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(4)]
	void DeleteHotkey([In][MarshalAs(UnmanagedType.BStr)] string szPluginCookie, [In][MarshalAs(UnmanagedType.BStr)] string szHotkeyName);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(5)]
	[return: MarshalAs(UnmanagedType.Interface)]
	Hotkey QueryHotkeyEx([In][MarshalAs(UnmanagedType.BStr)] string szPluginCookie, [In][MarshalAs(UnmanagedType.BStr)] string szTitle);
}
