using System.Runtime.InteropServices;
using Decal.Interop.Core;
using Decal.Interop.Render;

namespace Decal.DecalRender
{
    [ComVisible(true)]
    [Guid("218432A3-8960-4D91-BBC6-8CDC105C191E")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("DecalRender.HUDBackground")]
    public class HUDBackgroundImpl : IHUDBackground
    {
        private object _surface;
        private tagRECT _region;

        // IRenderTarget
        public bool Lost => false;
        public void SetSurface(object pSurface) => _surface = pSurface;
        public object GetSurface() => _surface;
        public tagRECT Region { get => _region; set => _region = value; }
        public tagRECT Constraints => _region;
        public void Fill(ref tagRECT FillArea, int Color) { }
        public void Clear(ref tagRECT ClearArea) { }
        public void BeginRender(bool bFilterTexture) { }
        public void EndRender() { }
        public void BeginText(string FontName, int lHeight, int lWeight, bool bItalic) { }
        public void EndText() { }
        public void DrawPortalImage(int lPortalFile, ref tagRECT DestArea) { }
        public void DrawPortalImageEx(int lPortalFile, int lAlpha, ref tagRECT SrcArea, ref tagRECT DestArea) { }
        public void DrawImage(int pBuffer, int lSize, ref tagRECT DestRegion, int lColorKey) { }
        public void WriteText(ref tagRECT Region, int lColor, int lFormat, string Text) { }
        public void TilePortalImage(int lPortalFile, ref tagRECT DestArea) { }
        public void TilePortalImageEx(int lPortalFile, ref tagRECT SrcArea, ref tagRECT DestArea) { }

        public RenderTargetWrapper Constrain(ref tagRECT Region)
        {
            return (RenderTargetWrapper)(object)new RenderTargetWrapperImpl();
        }

        // IHUDBackground
        public HUDBackground Clone()
        {
            var clone = new HUDBackgroundImpl { _region = _region, _surface = _surface };
            return (HUDBackground)(object)clone;
        }
    }
}
