import type { HardwareSpec } from "./hardware.js";

export interface AmdGpuHardwareSpec extends HardwareSpec {
	/**
	 * GFX version / LLVM ISA target (AMD GPUs only), e.g. "gfx1100"
	 *
	 * potential source https://llvm.org/docs/AMDGPUUsage.html#processors
	 */
	gfxVersion: string;
}

const AMD_GPU_INTEGRATED_SHARED_MEMORY_OPTIONS = [16, 24, 32, 48, 64, 96];

export const AMD_GPU_SKUS: Record<string, AmdGpuHardwareSpec> = {
	MI300: {
		tflops: 383.0,
		memory: [192],
		gfxVersion: "gfx942",
		msrp: 15_000,
		power: 750,
		releaseYear: 2023,
	},
	MI250: {
		tflops: 362.1,
		memory: [128],
		gfxVersion: "gfx90a",
		msrp: 10_000,
		power: 560,
		releaseYear: 2021,
	},
	MI210: {
		tflops: 181.0,
		memory: [64],
		gfxVersion: "gfx90a",
		msrp: 8_000,
		power: 300,
		releaseYear: 2022,
	},
	MI100: {
		tflops: 184.6,
		memory: [32],
		gfxVersion: "gfx908",
		msrp: 6_400,
		power: 300,
		releaseYear: 2020,
	},
	MI60: {
		tflops: 29.5,
		memory: [32],
		gfxVersion: "gfx906",
		msrp: 3_000,
		power: 300,
		releaseYear: 2018,
	},
	MI50: {
		tflops: 26.5,
		memory: [16, 32],
		gfxVersion: "gfx906",
		msrp: 1_800,
		power: 300,
		releaseYear: 2018,
	},
	"R9700 PRO": {
		tflops: 95.7,
		memory: [32],
		gfxVersion: "gfx1201",
		msrp: 1_250,
		power: 300,
		releaseYear: 2025,
	},
	"RX 9070 XT": {
		tflops: 97.32,
		memory: [16],
		gfxVersion: "gfx1201",
		msrp: 600,
		power: 304,
		releaseYear: 2025,
	},
	"RX 9070": {
		tflops: 72.25,
		memory: [16],
		gfxVersion: "gfx1201",
		msrp: 550,
		power: 220,
		releaseYear: 2025,
	},
	"RX 9060 XT": {
		tflops: 51.28,
		memory: [8, 16],
		gfxVersion: "gfx1200",
		msrp: 350,
		power: 160,
		releaseYear: 2025,
	},
	"PRO W7900": {
		tflops: 122.6,
		memory: [48],
		gfxVersion: "gfx1100",
		msrp: 4_000,
		power: 295,
		releaseYear: 2023,
	},
	"PRO W7800": {
		tflops: 90.5,
		memory: [32, 48],
		gfxVersion: "gfx1100",
		msrp: 2_500,
		power: 260,
		releaseYear: 2023,
	},
	"RX 7900 XTX": {
		tflops: 122.8,
		memory: [24],
		gfxVersion: "gfx1100",
		msrp: 1_000,
		power: 355,
		releaseYear: 2022,
	},
	"RX 7900 XT": {
		tflops: 103.0,
		memory: [20],
		gfxVersion: "gfx1100",
		msrp: 900,
		power: 315,
		releaseYear: 2022,
	},
	"RX 7900 GRE": {
		tflops: 91.96,
		memory: [16],
		gfxVersion: "gfx1100",
		msrp: 550,
		power: 260,
		releaseYear: 2023,
	},
	"RX 7800 XT": {
		tflops: 74.65,
		memory: [16],
		gfxVersion: "gfx1101",
		msrp: 500,
		power: 263,
		releaseYear: 2023,
	},
	"RX 7700 XT": {
		tflops: 70.34,
		memory: [12],
		gfxVersion: "gfx1101",
		msrp: 450,
		power: 245,
		releaseYear: 2023,
	},
	"RX 7600 XT": {
		tflops: 45.14,
		memory: [16, 8],
		gfxVersion: "gfx1102",
		msrp: 350,
		power: 190,
		releaseYear: 2024,
	},
	"RX 6950 XT": {
		tflops: 47.31,
		memory: [16],
		gfxVersion: "gfx1030",
		msrp: 1_100,
		power: 335,
		releaseYear: 2022,
	},
	"RX 6800": {
		tflops: 32.33,
		memory: [16],
		gfxVersion: "gfx1030",
		msrp: 600,
		power: 250,
		releaseYear: 2020,
	},
	"RX 6700 XT": {
		tflops: 26.43,
		memory: [12],
		gfxVersion: "gfx1031",
		msrp: 500,
		power: 230,
		releaseYear: 2021,
	},
	"RX 6700": {
		tflops: 22.58,
		memory: [10],
		gfxVersion: "gfx1031",
		msrp: 329,
		power: 175,
		releaseYear: 2022,
	},
	"RX 6650 XT": {
		tflops: 21.59,
		memory: [8],
		gfxVersion: "gfx1032",
		msrp: 400,
		power: 180,
		releaseYear: 2022,
	},
	"RX 6600 XT": {
		tflops: 21.21,
		memory: [8],
		gfxVersion: "gfx1032",
		msrp: 400,
		power: 160,
		releaseYear: 2021,
	},
	"RX 6600": {
		tflops: 17.86,
		memory: [8],
		gfxVersion: "gfx1032",
		msrp: 350,
		power: 132,
		releaseYear: 2021,
	},
	"RX 5700 XT": {
		tflops: 19.51,
		memory: [8],
		gfxVersion: "gfx1010",
		msrp: 399,
		power: 225,
		releaseYear: 2019,
	},
	"RX 5700": {
		tflops: 15.9,
		memory: [8],
		gfxVersion: "gfx1010",
		msrp: 349,
		power: 180,
		releaseYear: 2019,
	},
	"RX 5500 XT": {
		tflops: 10.39,
		memory: [4, 8],
		gfxVersion: "gfx1012",
		msrp: 200,
		power: 130,
		releaseYear: 2019,
	},
	"Radeon Pro V620": {
		tflops: 40.55,
		memory: [32],
		gfxVersion: "gfx1030",
		msrp: 3_000,
		power: 300,
		releaseYear: 2021,
	},
	"Radeon Pro VII": {
		tflops: 26.11,
		memory: [16, 32],
		gfxVersion: "gfx906",
		msrp: 1_900,
		power: 250,
		releaseYear: 2020,
	},
	"Radeon 610M": {
		tflops: 0.97,
		memory: AMD_GPU_INTEGRATED_SHARED_MEMORY_OPTIONS,
		gfxVersion: "gfx1037",
		msrp: 300,
		power: 15,
		releaseYear: 2022,
	},
	"Radeon 740M": {
		tflops: 5.12,
		memory: AMD_GPU_INTEGRATED_SHARED_MEMORY_OPTIONS,
		gfxVersion: "gfx1103",
		msrp: 179,
		power: 15,
		releaseYear: 2023,
	},
	"Radeon 760M": {
		tflops: 10.65,
		memory: AMD_GPU_INTEGRATED_SHARED_MEMORY_OPTIONS,
		gfxVersion: "gfx1103",
		msrp: 229,
		power: 15,
		releaseYear: 2023,
	},
	"Radeon 780M": {
		tflops: 16.59,
		memory: AMD_GPU_INTEGRATED_SHARED_MEMORY_OPTIONS,
		gfxVersion: "gfx1103",
		msrp: 329,
		power: 15,
		releaseYear: 2023,
	},
	"Radeon 820M": {
		tflops: 1.434,
		memory: AMD_GPU_INTEGRATED_SHARED_MEMORY_OPTIONS,
		gfxVersion: "gfx1152",
		msrp: 200,
		power: 15,
		releaseYear: 2025,
	},
	"Radeon 840M": {
		tflops: 2.97,
		memory: AMD_GPU_INTEGRATED_SHARED_MEMORY_OPTIONS,
		gfxVersion: "gfx1152",
		msrp: 250,
		power: 15,
		releaseYear: 2025,
	},
	"Radeon 860M": {
		tflops: 6.14,
		memory: AMD_GPU_INTEGRATED_SHARED_MEMORY_OPTIONS,
		gfxVersion: "gfx1152",
		msrp: 300,
		power: 15,
		releaseYear: 2025,
	},
	"Radeon 880M": {
		tflops: 8.91,
		memory: AMD_GPU_INTEGRATED_SHARED_MEMORY_OPTIONS,
		gfxVersion: "gfx1150",
		msrp: 400,
		power: 15,
		releaseYear: 2024,
	},
	"Radeon 890M": {
		tflops: 11.88,
		memory: AMD_GPU_INTEGRATED_SHARED_MEMORY_OPTIONS,
		gfxVersion: "gfx1150",
		msrp: 450,
		power: 15,
		releaseYear: 2024,
	},
	"Ryzen AI Max+ 395": {
		tflops: 29.7,
		memory: [64, 96, 128],
		gfxVersion: "gfx1151",
		msrp: 1_500,
		power: 120,
		releaseYear: 2025,
	},
};
