using System.Runtime.InteropServices;
using Decal.Interop.D3DService;

namespace Decal.D3DService
{
    [ComVisible(true)]
    [Guid("81E79859-2783-4B9A-ADC4-308073F5BB3F")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("D3DService.CD3DObj")]
    public class D3DObjImpl : ID3DObj
    {
        private float _scaleX = 1, _scaleY = 1, _scaleZ = 1;
        private bool _autoscale;
        private int _color, _color2;
        private float _pFade;
        private float _pBounce, _hBounce;
        private float _pOrbit, _rOrbit;
        private float _pSpin;
        private bool _visible = true;
        private bool _drawBackface;
        private float _animationPhaseOffset;

        // Appearance
        public void SetIcon(int icon) { }
        public void SetIconFromResource(int hmodule, int idr) { }
        public void SetIconFromFile(string bstrFilename) { }
        public void SetShape(eShape shape) { }
        public void SetShapeFromResource(int hmodule, int idr) { }
        public void SetShapeFromFile(string bstrFilename) { }
        public void SetScale(float scale) { _scaleX = _scaleY = _scaleZ = scale; }
        public void Set2DText(string szText, string szFont, int options) { }
        public void Set3DText(string szText, string szFont, int options) { }

        // Scale
        public float scaleX { get => _scaleX; set => _scaleX = value; }
        public float scaleY { get => _scaleY; set => _scaleY = value; }
        public float scaleZ { get => _scaleZ; set => _scaleZ = value; }
        public bool autoscale { get => _autoscale; set => _autoscale = value; }

        // Color
        public int color { get => _color; set => _color = value; }
        public int color2 { get => _color2; set => _color2 = value; }

        // Effects
        public float pFade { get => _pFade; set => _pFade = value; }
        public float pBounce { get => _pBounce; set => _pBounce = value; }
        public float hBounce { get => _hBounce; set => _hBounce = value; }
        public float pOrbit { get => _pOrbit; set => _pOrbit = value; }
        public float rOrbit { get => _rOrbit; set => _rOrbit = value; }
        public float pSpin { get => _pSpin; set => _pSpin = value; }
        public float AnimationPhaseOffset { get => _animationPhaseOffset; set => _animationPhaseOffset = value; }

        // Anchoring
        public void AnchorToObject(int guid, float fractHeight, float dx, float dy, float dz) { }
        public void AnchorToCoords(float lat, float lng, float alt) { }

        // Orientation
        public void OrientToCamera(bool fTilt) { }
        public void OrientToPlayer(bool fTilt) { }
        public void OrientToObject(int guid, float fractHeight, bool fTilt) { }
        public void OrientToCoords(float lat, float lng, float alt, bool fTilt) { }

        // Visibility
        public bool visible { get => _visible; set => _visible = value; }
        public bool drawBackface { get => _drawBackface; set => _drawBackface = value; }
    }
}
