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

namespace Decal.Interop.Inject;

[ComImport]
[Guid("2B52B5CB-9E10-4238-8F62-A501406E3EAB")]
[SuppressUnmanagedCodeSecurity]
[InterfaceType(1)]
[ComConversionLoss]
public interface IPanel
{
	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	void AddView(int nViewID, [MarshalAs(UnmanagedType.Interface)] ILayer pLayer);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	void ActivateView(int nViewID, ref ViewParams pParams, ref int pVal);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	void RemoveView(int nViewID);

	[DispId(1610678275)]
	int ActiveView
	{
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
		get;
	}

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	void LoadView(int nViewID, [MarshalAs(UnmanagedType.Interface)] View pView, [MarshalAs(UnmanagedType.IUnknown)] object pSchema);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	void Deactivate();

	[DispId(1610678278)]
	IPanelSink Sink
	{
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
		[param: In]
		[param: MarshalAs(UnmanagedType.Interface)]
		set;
	}

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	void LoadViewEx(int nViewID, [MarshalAs(UnmanagedType.Interface)] View pView, [MarshalAs(UnmanagedType.IUnknown)] object pSchema, int lViewFlags);

	[DispId(1610678280)]
	bool Transparent
	{
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
		get;
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
		[param: In]
		set;
	}

	[DispId(1610678282)]
	IntPtr @params
	{
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
		[param: In]
		set;
	}
}
