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

namespace Decal.Interop.D3DService;

[ComImport]
[Guid("0BB41679-549E-4916-8B70-6A7B3CA1A31C")]
[SuppressUnmanagedCodeSecurity]
[TypeLibType(4160)]
public interface ID3DService
{
	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(1)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj NewD3DObj();

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(2)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj PointToObject([In] int guid, [In] int color);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(3)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj PointToCoords([In] float lat, [In] float lng, [In] float alt, [In] int color);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(4)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj MarkObjectWithIcon([In] int guid, [In] int icon);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(5)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj MarkObjectWithIconFromFile([In] int guid, [In][MarshalAs(UnmanagedType.BStr)] string bstrFilename);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(6)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj MarkObjectWithShape([In] int guid, [In] eShape shape, [In] int color);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(7)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj MarkObjectWithShapeFromFile([In] int guid, [In][MarshalAs(UnmanagedType.BStr)] string bstrFilename, [In] int color);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(13)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj MarkObjectWith2DText([In] int guid, [In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(14)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj MarkObjectWith3DText([In] int guid, [In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(8)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj MarkCoordsWithIcon([In] float lat, [In] float lng, [In] float alt, [In] int icon);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(9)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj MarkCoordsWithIconFromFile([In] float lat, [In] float lng, [In] float alt, [In][MarshalAs(UnmanagedType.BStr)] string bstrFilename);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(10)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj MarkCoordsWithShape([In] float lat, [In] float lng, [In] float alt, [In] eShape shape, [In] int color);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(11)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj MarkCoordsWithShapeFromFile([In] float lat, [In] float lng, [In] float alt, [In][MarshalAs(UnmanagedType.BStr)] string bstrFilename, [In] int color);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(15)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj MarkCoordsWith2DText([In] float lat, [In] float lng, [In] float alt, [In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(16)]
	[return: MarshalAs(UnmanagedType.Interface)]
	CD3DObj MarkCoordsWith3DText([In] float lat, [In] float lng, [In] float alt, [In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);

	[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
	[DispId(12)]
	void TraceOneFrame();
}
