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

namespace Decal.Interop.DHS;

[ComImport]
[TypeLibType(2)]
[SuppressUnmanagedCodeSecurity]
[Guid("6B6B9FA8-37DE-4FA3-8C60-52BD6A2F9855")]
[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces("Decal.Interop.DHS._IHotkeySystemEvents\0\0")]
public class HotkeySystemClass : IHotkeySystem, HotkeySystem, _IHotkeySystemEvents_Event
{
	public virtual extern event _IHotkeySystemEvents_HotkeyEventEventHandler HotkeyEvent;

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1)]
	public virtual extern void AddHotkey([In][MarshalAs(UnmanagedType.BStr)] string szPlugin, [In][MarshalAs(UnmanagedType.Interface)] Hotkey pHotkey);

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

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

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(4)]
	public virtual extern 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)]
	public virtual extern Hotkey QueryHotkeyEx([In][MarshalAs(UnmanagedType.BStr)] string szPluginCookie, [In][MarshalAs(UnmanagedType.BStr)] string szTitle);
}
