using Decal.Interop.D3DService;

namespace Decal.Adapter.Wrappers;

public class D3DService : GenericDisposableWrapper<CService>
{
	internal D3DService(CService obj)
		: base(obj)
	{
	}

	protected override void Dispose(bool userCalled)
	{
		base.Dispose(userCalled);
	}

	/// <summary>
	/// Makes a new D3DObj
	/// </summary>
	public D3DObj NewD3DObj()
	{
		return new D3DObj(base.Wrapped.NewD3DObj());
	}

	/// <summary>
	/// Creates an arrow that points to an object
	/// </summary>
	/// <param name="guid">Object ID</param>
	/// <param name="color">Color</param>
	public D3DObj PointToObject(int guid, int color)
	{
		return new D3DObj(base.Wrapped.PointToObject(guid, color));
	}

	/// <summary>
	/// Creates an arrow that points to specified Coordinates
	/// </summary>
	/// <param name="lat">Latitude</param>
	/// <param name="lng">Longitude</param>
	/// <param name="alt">Altitude</param>
	/// <param name="color">Color</param>
	public D3DObj PointToCoords(float lat, float lng, float alt, int color)
	{
		return new D3DObj(base.Wrapped.PointToCoords(lat, lng, alt, color));
	}

	/// <summary>
	/// Mark an Object with an Icon
	/// </summary>
	/// <param name="guid">Object ID</param>
	/// <param name="icon">Portal.dat Icon</param>
	public D3DObj MarkObjectWithIcon(int guid, int icon)
	{
		return new D3DObj(base.Wrapped.MarkObjectWithIcon(guid, icon));
	}

	/// <summary>
	/// Mark an Object with a Shape
	/// </summary>
	/// <param name="guid">Object ID</param>
	/// <param name="shape">D3DShape</param>
	/// <param name="color">Color</param>
	public D3DObj MarkObjectWithShape(int guid, D3DShape shape, int color)
	{
		return new D3DObj(base.Wrapped.MarkObjectWithShape(guid, (eShape)shape, color));
	}

	/// <summary>
	/// Mark an Object with a Shape
	/// </summary>
	/// <param name="guid">Object ID</param>
	/// <param name="filename">Mesh filename</param>
	/// <param name="color">Color</param>
	public D3DObj MarkObjectWithShapeFromFile(int guid, string filename, int color)
	{
		return new D3DObj(base.Wrapped.MarkObjectWithShapeFromFile(guid, filename, color));
	}

	/// <summary>
	/// Mark an Object with 2DText
	/// </summary>
	/// <param name="guid">Object ID</param>
	/// <param name="szText">Text</param>
	/// <param name="szFont">Font</param>
	/// <param name="options">zero or more option flags from DecalPlugins::eFontOptions</param>
	public D3DObj MarkObjectWith2DText(int guid, string szText, string szFont, int options)
	{
		return new D3DObj(base.Wrapped.MarkObjectWith2DText(guid, szText, szFont, options));
	}

	/// <summary>
	/// Mark an Object with 3DText
	/// </summary>
	/// <param name="guid">Object ID</param>
	/// <param name="szText">Text</param>
	/// <param name="szFont">Font</param>
	/// <param name="options">zero or more option flags from DecalPlugins::eFontOptions</param>
	public D3DObj MarkObjectWith3DText(int guid, string szText, string szFont, int options)
	{
		return new D3DObj(base.Wrapped.MarkObjectWith3DText(guid, szText, szFont, options));
	}

	/// <summary>
	/// Mark specified Coordinates with Icon
	/// </summary>
	/// <param name="lat">Latitude</param>
	/// <param name="lng">Longitude</param>
	/// <param name="alt">Altitude</param>
	/// <param name="icon">Portal.dat Icon</param>
	public D3DObj MarkCoordsWithIcon(float lat, float lng, float alt, int icon)
	{
		return new D3DObj(base.Wrapped.MarkCoordsWithIcon(lat, lng, alt, icon));
	}

	/// <summary>
	/// Mark specified Coordinates with Icon
	/// </summary>
	/// <param name="lat">Latitude</param>
	/// <param name="lng">Longitude</param>
	/// <param name="alt">Altitude</param>
	/// <param name="file">Icon filename</param>
	public D3DObj MarkCoordsWithIconFromFile(float lat, float lng, float alt, string file)
	{
		return new D3DObj(base.Wrapped.MarkCoordsWithIconFromFile(lat, lng, alt, file));
	}

	/// <summary>
	/// Mark specified Coordinates with Shape
	/// </summary>
	/// <param name="lat">Latitude</param>
	/// <param name="lng">Longitude</param>
	/// <param name="alt">Altitude</param>
	/// <param name="shape">D3DShape</param>
	/// <param name="color">Color</param>
	public D3DObj MarkCoordsWithShape(float lat, float lng, float alt, D3DShape shape, int color)
	{
		return new D3DObj(base.Wrapped.MarkCoordsWithShape(lat, lng, alt, (eShape)shape, color));
	}

	/// <summary>
	/// Mark specified Coordinates with Shape
	/// </summary>
	/// <param name="lat">Latitude</param>
	/// <param name="lng">Longitude</param>
	/// <param name="alt">Altitude</param>
	/// <param name="file">Mesh filename</param>
	/// <param name="color">Color</param>
	public D3DObj MarkCoordsWithShapeFromFile(float lat, float lng, float alt, string file, int color)
	{
		return new D3DObj(base.Wrapped.MarkCoordsWithShapeFromFile(lat, lng, alt, file, color));
	}

	/// <summary>
	/// Mark specified Coordinates with 2DText
	/// </summary>
	/// <param name="lat">Latitude</param>
	/// <param name="lng">Longitude</param>
	/// <param name="alt">Altitude</param>
	/// <param name="szText">Text</param>
	/// <param name="szFont">Font</param>
	/// <param name="options">zero or more option flags from DecalPlugins::eFontOptions</param>
	public D3DObj MarkCoordsWith2DText(float lat, float lng, float alt, string szText, string szFont, int options)
	{
		return new D3DObj(base.Wrapped.MarkCoordsWith2DText(lat, lng, alt, szText, szFont, options));
	}

	/// <summary>
	/// Mark specified Coordinates with 3DText
	/// </summary>
	/// <param name="lat">Latitude</param>
	/// <param name="lng">Longitude</param>
	/// <param name="alt">Altitude</param>
	/// <param name="szText">Text</param>
	/// <param name="szFont">Font</param>
	/// <param name="options">zero or more option flags from DecalPlugins::eFontOptions</param>
	public D3DObj MarkCoordsWith3DText(float lat, float lng, float alt, string szText, string szFont, int options)
	{
		return new D3DObj(base.Wrapped.MarkCoordsWith3DText(lat, lng, alt, szText, szFont, options));
	}
}
