// from http://mp4ra.org/codecs.html
const sampleEntryCodesISO = {
    audio: {
        a3ds: true,
        'ac-3': true,
        'ac-4': true,
        alac: true,
        alaw: true,
        dra1: true,
        'dts+': true,
        'dts-': true,
        dtsc: true,
        dtse: true,
        dtsh: true,
        'ec-3': true,
        enca: true,
        g719: true,
        g726: true,
        m4ae: true,
        mha1: true,
        mha2: true,
        mhm1: true,
        mhm2: true,
        mlpa: true,
        mp4a: true,
        'raw ': true,
        Opus: true,
        samr: true,
        sawb: true,
        sawp: true,
        sevc: true,
        sqcp: true,
        ssmv: true,
        twos: true,
        ulaw: true
    },
    video: {
        avc1: true,
        avc2: true,
        avc3: true,
        avc4: true,
        avcp: true,
        drac: true,
        dvav: true,
        dvhe: true,
        encv: true,
        hev1: true,
        hvc1: true,
        mjp2: true,
        mp4v: true,
        mvc1: true,
        mvc2: true,
        mvc3: true,
        mvc4: true,
        resv: true,
        rv60: true,
        s263: true,
        svc1: true,
        svc2: true,
        'vc-1': true,
        vp08: true,
        vp09: true
    }
};

export type CodecType = 'audio' | 'video'

function isCodecType(codec: string, type: CodecType): boolean {
    const typeCodes: any = sampleEntryCodesISO[type];
    return !!typeCodes && typeCodes[codec.slice(0, 4)] === true;
}

function isCodecSupportedInMp4(codec: string, type: CodecType): boolean {
    return (window as any).MediaSource.isTypeSupported(`${type || 'video'}/mp4;codecs="${codec}"`);
}

export { isCodecType, isCodecSupportedInMp4 };
