import {GL} from '../gl-constants';

const VULKAN_TO_WEBGL_FORMAT_MAP = {
  131: GL.COMPRESSED_RGB_S3TC_DXT1_EXT,
  132: GL.COMPRESSED_SRGB_S3TC_DXT1_EXT,
  133: GL.COMPRESSED_RGBA_S3TC_DXT1_EXT,
  134: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,
  135: GL.COMPRESSED_RGBA_S3TC_DXT3_EXT,
  136: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,
  137: GL.COMPRESSED_RGBA_S3TC_DXT5_EXT,
  138: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,
  139: GL.COMPRESSED_RED_RGTC1_EXT,
  140: GL.COMPRESSED_SIGNED_RED_RGTC1_EXT,
  141: GL.COMPRESSED_RED_GREEN_RGTC2_EXT,
  142: GL.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,
  147: GL.COMPRESSED_RGB8_ETC2,
  148: GL.COMPRESSED_SRGB8_ETC2,
  149: GL.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
  150: GL.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
  151: GL.COMPRESSED_RGBA8_ETC2_EAC,
  152: GL.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
  153: GL.COMPRESSED_R11_EAC,
  154: GL.COMPRESSED_SIGNED_R11_EAC,
  155: GL.COMPRESSED_RG11_EAC,
  156: GL.COMPRESSED_SIGNED_RG11_EAC,
  // @ts-ignore
  157: GL.COMPRESSED_RGBA_ASTC_4x4_KHR,
  // @ts-ignore
  158: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,
  // @ts-ignore
  159: GL.COMPRESSED_RGBA_ASTC_5x4_KHR,
  // @ts-ignore
  160: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR,
  // @ts-ignore
  161: GL.COMPRESSED_RGBA_ASTC_5x5_KHR,
  // @ts-ignore
  162: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,
  // @ts-ignore
  163: GL.COMPRESSED_RGBA_ASTC_6x5_KHR,
  // @ts-ignore
  164: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,
  // @ts-ignore
  165: GL.COMPRESSED_RGBA_ASTC_6x6_KHR,
  // @ts-ignore
  166: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,
  // @ts-ignore
  167: GL.COMPRESSED_RGBA_ASTC_8x5_KHR,
  // @ts-ignore
  168: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,
  // @ts-ignore
  169: GL.COMPRESSED_RGBA_ASTC_8x6_KHR,
  // @ts-ignore
  170: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,
  // @ts-ignore
  171: GL.COMPRESSED_RGBA_ASTC_8x8_KHR,
  // @ts-ignore
  172: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,
  // @ts-ignore
  173: GL.COMPRESSED_RGBA_ASTC_10x5_KHR,
  // @ts-ignore
  174: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,
  // @ts-ignore
  175: GL.COMPRESSED_RGBA_ASTC_10x6_KHR,
  // @ts-ignore
  176: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,
  // @ts-ignore
  177: GL.COMPRESSED_RGBA_ASTC_10x8_KHR,
  // @ts-ignore
  178: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,
  // @ts-ignore
  179: GL.COMPRESSED_RGBA_ASTC_10x10_KHR,
  // @ts-ignore
  180: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,
  // @ts-ignore
  181: GL.COMPRESSED_RGBA_ASTC_12x10_KHR,
  // @ts-ignore
  182: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,
  // @ts-ignore
  183: GL.COMPRESSED_RGBA_ASTC_12x12_KHR,
  // @ts-ignore
  184: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,
  1000054000: GL.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,
  1000054001: GL.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,
  // @ts-ignore
  1000066000: GL.COMPRESSED_RGBA_ASTC_4x4_KHR,
  // @ts-ignore
  1000066001: GL.COMPRESSED_RGBA_ASTC_5x4_KHR,
  // @ts-ignore
  1000066002: GL.COMPRESSED_RGBA_ASTC_5x5_KHR,
  // @ts-ignore
  1000066003: GL.COMPRESSED_RGBA_ASTC_6x5_KHR,
  // @ts-ignore
  1000066004: GL.COMPRESSED_RGBA_ASTC_6x6_KHR,
  // @ts-ignore
  1000066005: GL.COMPRESSED_RGBA_ASTC_8x5_KHR,
  // @ts-ignore
  1000066006: GL.COMPRESSED_RGBA_ASTC_8x6_KHR,
  // @ts-ignore
  1000066007: GL.COMPRESSED_RGBA_ASTC_8x8_KHR,
  // @ts-ignore
  1000066008: GL.COMPRESSED_RGBA_ASTC_10x5_KHR,
  // @ts-ignore
  1000066009: GL.COMPRESSED_RGBA_ASTC_10x6_KHR,
  // @ts-ignore
  1000066010: GL.COMPRESSED_RGBA_ASTC_10x8_KHR,
  // @ts-ignore
  1000066011: GL.COMPRESSED_RGBA_ASTC_10x10_KHR,
  // @ts-ignore
  1000066012: GL.COMPRESSED_RGBA_ASTC_12x10_KHR,
  // @ts-ignore
  1000066013: GL.COMPRESSED_RGBA_ASTC_12x12_KHR
};

/**
 * Returns WebGl format based on Vulkan format
 * Vulkan to WebGl format mapping provided here http://github.khronos.org/KTX-Specification/#formatMapping
 * Vulkan name to format number mapping provided here: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFormat.html
 * @param {Number} vkFormat
 * @returns {Number}
 */
export function mapVkFormatToWebGL(vkFormat) {
  return VULKAN_TO_WEBGL_FORMAT_MAP[vkFormat];
}
