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

namespace HIVECOMKERNELLib;

[ComImport]
[ComSourceInterfaces("HIVECOMKERNELLib._IHKernelEvents\0\0")]
[Guid("F7413577-F70D-4D2E-8B70-B0B1FEFC0860")]
[ClassInterface(ClassInterfaceType.None)]
[TypeLibType(TypeLibTypeFlags.FCanCreate)]
public class HKernelClass : IHKernel, HKernel, _IHKernelEvents_Event
{
	public virtual extern event _IHKernelEvents_TestDoneEventHandler TestDone;

	public virtual extern event _IHKernelEvents_OnTextOutEventHandler OnTextOut;

	public virtual extern event _IHKernelEvents_OnPrintMsgEventHandler OnPrintMsg;

	public virtual extern event _IHKernelEvents_OnTPLWindowMsgEventHandler OnTPLWindowMsg;

	public virtual extern event _IHKernelEvents_OnHTMLWindowMsgEventHandler OnHTMLWindowMsg;

	public virtual extern event _IHKernelEvents_SetSUITETestParamDetailsEventHandler SetSUITETestParamDetails;

	public virtual extern event _IHKernelEvents_OnSetGlobalVariableEventHandler OnSetGlobalVariable;

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1)]
	public virtual extern void LoadTestDLL([MarshalAs(UnmanagedType.BStr)] string DLLName, [MarshalAs(UnmanagedType.BStr)] ref string ListOfTests);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(2)]
	public virtual extern void RunTest([MarshalAs(UnmanagedType.BStr)] string strTestName, [MarshalAs(UnmanagedType.Struct)] ref object arrayParam, [MarshalAs(UnmanagedType.Struct)] ref object TestDetails);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(3)]
	public virtual extern void GetAllParamInfo([MarshalAs(UnmanagedType.BStr)] string strTestName, [MarshalAs(UnmanagedType.Struct)] ref object arrayParam);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(4)]
	public virtual extern void GetResultsParamInfo([MarshalAs(UnmanagedType.Struct)] ref object arrayParam);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(5)]
	public virtual extern void UnloadTestDLL([MarshalAs(UnmanagedType.BStr)] string DLLName);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(6)]
	public virtual extern void SetTreeName([MarshalAs(UnmanagedType.BStr)] string TestTreeName);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(7)]
	public virtual extern void StopTest();

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(8)]
	public virtual extern void LoadTestDLLEx([MarshalAs(UnmanagedType.BStr)] string DLLName, [MarshalAs(UnmanagedType.BStr)] ref string ListOfTests, [MarshalAs(UnmanagedType.BStr)] ref string ListOfTestsToBeShown);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(9)]
	public virtual extern void GetTestDescription([MarshalAs(UnmanagedType.BStr)] string TestName, [MarshalAs(UnmanagedType.BStr)] ref string TestDesc);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(10)]
	public virtual extern void SendGlobalVariable([MarshalAs(UnmanagedType.BStr)] string gvName, [MarshalAs(UnmanagedType.BStr)] string gvValue);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(11)]
	public virtual extern void SendGlobalVariables([MarshalAs(UnmanagedType.Struct)] ref object gvNames, [MarshalAs(UnmanagedType.Struct)] ref object gvValues, int size);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(12)]
	public virtual extern void IsInAutomation(int IsInAutomation);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(13)]
	public virtual extern void TraceLogs(int enableTrace);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(14)]
	public virtual extern void EnableSUITEOutParam(int enable);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(15)]
	public virtual extern void NotifyEventListeners([MarshalAs(UnmanagedType.BStr)] string eventName);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(16)]
	public virtual extern void IsSafeToExit(ref int isSafeToExitFlag);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(17)]
	public virtual extern void GetTestProperties([MarshalAs(UnmanagedType.BStr)] string strTestName, [MarshalAs(UnmanagedType.Struct)] ref object arrayProperties);
}
