using System;
using System.Runtime.InteropServices;

namespace Raylib_cs
{
    /// <summary>
    /// Font type, defines generation method
    /// </summary>
    public enum FontType
    {
        /// <summary>
        /// Default font generation, anti-aliased
        /// </summary>
        FONT_DEFAULT = 0,

        /// <summary>
        /// Bitmap font generation, no anti-aliasing
        /// </summary>
        FONT_BITMAP,

        /// <summary>
        /// SDF font generation, requires external shader
        /// </summary>
        FONT_SDF
    }

    /// <summary>
    /// GlyphInfo, font characters glyphs info
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    public partial struct GlyphInfo
    {
        /// <summary>
        /// Character value (Unicode)
        /// </summary>
        public int value;

        /// <summary>
        /// Character offset X when drawing
        /// </summary>
        public int offsetX;

        /// <summary>
        /// Character offset Y when drawing
        /// </summary>
        public int offsetY;

        /// <summary>
        /// Character advance position X
        /// </summary>
        public int advanceX;

        /// <summary>
        /// Character image data
        /// </summary>
        public Image image;
    }

    /// <summary>
    /// Font, font texture and GlyphInfo array data
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    public unsafe partial struct Font
    {
        /// <summary>
        /// Base size (default chars height)
        /// </summary>
        public int baseSize;

        /// <summary>
        /// Number of characters
        /// </summary>
        public int glyphCount;

        /// <summary>
        /// Padding around the glyph characters
        /// </summary>
        public int glyphPadding;

        /// <summary>
        /// Texture atlas containing the glyphs
        /// </summary>
        public Texture2D texture;

        /// <summary>
        /// Rectangles in texture for the glyphs
        /// </summary>
        public Rectangle* recs;

        /// <summary>
        /// Glyphs info data
        /// </summary>
        public GlyphInfo* glyphs;
    }
}