import type {InputAudioTrack, InputVideoTrack} from 'mediabunny';
import type {InputContainer, OutputContainer} from '~/seo';

export const renderHumanReadableAudioCodec = (
	codec: InputAudioTrack['codec'],
) => {
	if (codec === 'opus') {
		return 'Opus';
	}

	if (codec === 'aac') {
		return 'AAC';
	}

	if (codec === 'mp3') {
		return 'MP3';
	}

	if (codec === 'pcm-f32') {
		return 'PCM 32-bit float';
	}

	if (codec === 'pcm-s16') {
		return 'PCM 16-bit signed integer';
	}

	if (codec === 'pcm-s24') {
		return 'PCM 24-bit signed integer';
	}

	if (codec === 'pcm-s32') {
		return 'PCM 32-bit signed integer';
	}

	if (codec === 'pcm-u8') {
		return 'PCM 8-bit unsigned integer';
	}

	if (codec === 'vorbis') {
		return 'Vorbis';
	}

	if (codec === 'flac') {
		return 'FLAC';
	}

	if (codec === 'alaw') {
		return 'A-law';
	}

	if (codec === 'ulaw') {
		return 'μ-law';
	}

	if (codec === 'pcm-s8') {
		return 'PCM 8-bit signed integer';
	}

	if (codec === 'pcm-s16be') {
		return 'PCM 16-bit big-endian signed integer';
	}

	if (codec === 'pcm-s24be') {
		return 'PCM 24-bit big-endian signed integer';
	}

	if (codec === 'pcm-s32be') {
		return 'PCM 32-bit big-endian signed integer';
	}

	if (codec === 'pcm-f32be') {
		return 'PCM 32-bit big-endian float';
	}

	if (codec === 'pcm-f64be') {
		return 'PCM 64-bit big-endian float';
	}

	if (codec === 'pcm-f64') {
		return 'PCM 64-bit little-endian float';
	}

	if (codec === 'ac3') {
		return 'AC3';
	}

	if (codec === 'eac3') {
		return 'E-AC3';
	}

	if (codec === 'aiff') {
		return 'AIFF';
	}

	if (codec === null) {
		return 'Unknown';
	}

	throw new Error(`Unknown audio codec ${codec satisfies never}`);
};

export const renderHumanReadableVideoCodec = (
	codec: InputVideoTrack['codec'],
) => {
	if (codec === 'vp8') {
		return 'VP8';
	}

	if (codec === 'vp9') {
		return 'VP9';
	}

	if (codec === 'av1') {
		return 'AV1';
	}

	if (codec === 'avc') {
		return 'H.264';
	}

	if (codec === 'hevc') {
		return 'H.265';
	}

	if (codec === 'prores') {
		return 'ProRes';
	}

	if (codec === 'h264') {
		return 'H.264';
	}

	if (codec === 'h265') {
		return 'H.265';
	}

	if (codec === null) {
		return 'Unknown';
	}

	throw new Error(`Unknown video codec ${codec satisfies never}`);
};

export const renderHumanReadableContainer = (
	container: InputContainer | OutputContainer,
) => {
	if (container === 'webm') {
		return '.webm';
	}

	if (container === 'mp4') {
		return '.mp4';
	}

	if (container === 'wav') {
		return '.wav';
	}

	if (container === 'mov') {
		return '.mov';
	}

	if (container === 'mkv') {
		return '.mkv';
	}

	if (container === 'aac') {
		return '.aac';
	}

	if (container === 'mp3') {
		return '.mp3';
	}

	throw new Error(`Unknown container ${container satisfies never}`);
};
