from enum import Enum


class TrackCodec(Enum):

    H265 =      {'identifier': 'hevc',               'format': 'h265',       'extension': 'h265' ,'label':   'H.265'}
    H264 =      {'identifier': 'h264',               'format': 'h264',       'extension': 'h264' ,'label':   'H.264'}
    MPEG4 =     {'identifier': 'mpeg4',             'format': 'm4v',        'extension': 'm4v' ,'label':   'MPEG-4'}
    MPEG2 =     {'identifier': 'mpeg2video',        'format': 'mpeg2video', 'extension': 'mpg' ,'label':   'MPEG-2'}

    AAC  =      {'identifier': 'aac',                'format': None,         'extension': 'aac'  , 'label':  'AAC'}
    AC3  =      {'identifier': 'ac3',                'format': 'ac3',        'extension': 'ac3'  , 'label':  'AC3'}
    EAC3 =      {'identifier': 'eac3',              'format': 'eac3',       'extension': 'eac3'  , 'label':  'EAC3'}
    DTS  =      {'identifier': 'dts',                'format': 'dts',        'extension': 'dts'  , 'label':  'DTS'}
    MP3  =      {'identifier': 'mp3',                'format': 'mp3',        'extension': 'mp3'  , 'label':  'MP3'}

    SRT  =      {'identifier': 'subrip',             'format': 'srt',        'extension': 'srt'  , 'label':  'SRT'}
    ASS  =      {'identifier': 'ass',                'format': 'ass',        'extension': 'ass'  , 'label':  'ASS'}
    TTF  =      {'identifier': 'ttf',                'format': None,         'extension': 'ttf'  , 'label':  'TTF'}
    PGS  =      {'identifier': 'hdmv_pgs_subtitle',  'format': 'sup',        'extension': 'sup'  , 'label':  'PGS'}
    VOBSUB =    {'identifier': 'dvd_subtitle',       'format': None,         'extension': 'mkv'  , 'label':  'VobSub'}

    PNG  =      {'identifier': 'png',                'format': None,          'extension': 'png'  , 'label':  'PNG'}

    UNKNOWN =   {'identifier': 'unknown', 'format': None, 'extension': None, 'label': 'UNKNOWN'}


    def identifier(self):
        """Returns the codec identifier"""
        return str(self.value['identifier'])

    def label(self):
        """Returns the codec as string"""
        return str(self.value['label'])

    def format(self):
        """Returns the codec """
        return self.value['format']

    def extension(self):
        """Returns the corresponding extension"""
        return str(self.value['extension'])

    @staticmethod
    def identify(identifier: str):
        clist = [c for c in TrackCodec if c.value['identifier'] == str(identifier)]
        if clist:
            return clist[0]
        else:
            return TrackCodec.UNKNOWN

    @staticmethod
    def fromLabel(label: str):
        clist = [c for c in TrackCodec if c.value['identifier'] == str(label)]
        if clist:
            return clist[0]
        else:
            return TrackCodec.UNKNOWN
