using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
using Decal.Interop.Core;

namespace Decal.Interop.Render;

[ComImport]
[TypeLibType(2)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("175D6713-E942-41C0-8BC9-90A565024F76")]
[SuppressUnmanagedCodeSecurity]
public class RenderTargetWrapperClass : IRenderTarget, RenderTargetWrapper
{
	[DispId(1610743808)]
	public virtual extern bool Lost
	{
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
		[DispId(1610743808)]
		get;
	}

	[DispId(1610743811)]
	public virtual extern tagRECT Region
	{
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
		[DispId(1610743811)]
		get;
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
		[DispId(1610743811)]
		[param: In]
		set;
	}

	[DispId(1610743825)]
	public virtual extern tagRECT Constraints
	{
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
		[DispId(1610743825)]
		[TypeLibFunc(64)]
		get;
	}

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[TypeLibFunc(64)]
	[DispId(1610743809)]
	public virtual extern void SetSurface([In][MarshalAs(UnmanagedType.IUnknown)] object pSurface);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1610743810)]
	[return: MarshalAs(UnmanagedType.IUnknown)]
	public virtual extern object GetSurface();

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1610743813)]
	public virtual extern void Fill([In] ref tagRECT FillArea, int Color = 0);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1610743814)]
	public virtual extern void Clear([In] ref tagRECT ClearArea);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1610743815)]
	public virtual extern void BeginRender([In] bool bFilterTexture = false);

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

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1610743817)]
	public virtual extern void BeginText([In][MarshalAs(UnmanagedType.BStr)] string FontName, int lHeight, int lWeight, [In] bool bItalic = false);

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

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1610743819)]
	public virtual extern void DrawPortalImage([In] int lPortalFile, ref tagRECT DestArea);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1610743820)]
	public virtual extern void DrawPortalImageEx([In] int lPortalFile, int lAlpha, ref tagRECT SrcArea, ref tagRECT DestArea);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1610743821)]
	public virtual extern void DrawImage([In] int pBuffer, int lSize, ref tagRECT DestRegion, int lColorKey);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1610743822)]
	public virtual extern void WriteText([In] ref tagRECT Region, int lColor, int lFormat, [MarshalAs(UnmanagedType.BStr)] string Text);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1610743823)]
	public virtual extern void TilePortalImage([In] int lPortalFile, ref tagRECT DestArea);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1610743824)]
	public virtual extern void TilePortalImageEx([In] int lPortalFile, ref tagRECT SrcArea, ref tagRECT DestArea);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1610743826)]
	[return: MarshalAs(UnmanagedType.Interface)]
	public virtual extern RenderTargetWrapper Constrain([In] ref tagRECT Region);
}
