namespace Kompas.Mcp.Core.Vision;

/// <summary>Формат растра для снимка модели (значения ksRasterFormatEnum / ksRasterFormatParam.format).</summary>
public enum RasterImageFormat : short
{
    Bmp = 0,
    Gif = 1,
    Jpg = 2,
    Png = 3,
    Tif = 4,
    Tga = 5,
}

public static class RasterImageFormats
{
    /// <summary>MIME-тип для image-контента MCP.</summary>
    public static string MimeType(this RasterImageFormat format) => format switch
    {
        RasterImageFormat.Png => "image/png",
        RasterImageFormat.Jpg => "image/jpeg",
        RasterImageFormat.Bmp => "image/bmp",
        RasterImageFormat.Gif => "image/gif",
        RasterImageFormat.Tif => "image/tiff",
        RasterImageFormat.Tga => "image/x-tga",
        _ => "application/octet-stream",
    };

    /// <summary>Расширение файла без точки — постоянная строка без аллокации (в отличие от ToString().ToLower()).</summary>
    public static string FileExtension(this RasterImageFormat format) => format switch
    {
        RasterImageFormat.Bmp => "bmp",
        RasterImageFormat.Gif => "gif",
        RasterImageFormat.Jpg => "jpg",
        RasterImageFormat.Png => "png",
        RasterImageFormat.Tif => "tif",
        RasterImageFormat.Tga => "tga",
        _ => format.ToString().ToLowerInvariant(),
    };

    public static RasterImageFormat Parse(string value) => value.Trim().ToLowerInvariant() switch
    {
        "png" => RasterImageFormat.Png,
        "jpg" or "jpeg" => RasterImageFormat.Jpg,
        "bmp" => RasterImageFormat.Bmp,
        "gif" => RasterImageFormat.Gif,
        "tif" or "tiff" => RasterImageFormat.Tif,
        "tga" => RasterImageFormat.Tga,
        _ => throw new ArgumentException($"Неизвестный формат растра '{value}'.", nameof(value)),
    };
}
