import re
from typing import Optional


def get_mime_type(content: bytes) -> str:
    if not content:
        return 'application/octet-stream'

    if content[0:3] in (b'CWS', b'FWS', b'ZWS'):
        return 'application/x-shockwave-flash'

    if content[0:3] == b'\xFF\xD8\xFF':
        return 'image/jpeg'

    if content[0:6] == b'\x89PNG\x0D\x0A':
        return 'image/png'

    if content[0:6] in (b'GIF87a', b'GIF89a'):
        return 'image/gif'

    if content[0:4] == b'\x1A\x45\xDF\xA3':
        return 'video/webm'

    if content[4:12] in (b'ftypisom', b'ftypmp42'):
        return 'video/mp4'

    return 'application/octet-stream'


def get_extension(mime_type: str) -> Optional[str]:
    extension_map = {
        'application/x-shockwave-flash': 'swf',
        'image/gif': 'gif',
        'image/jpeg': 'jpg',
        'image/png': 'png',
        'video/mp4': 'mp4',
        'video/webm': 'webm',
        'application/octet-stream': 'dat',
    }
    return extension_map.get((mime_type or '').strip().lower(), None)


def is_flash(mime_type: str) -> bool:
    return mime_type.lower() == 'application/x-shockwave-flash'


def is_video(mime_type: str) -> bool:
    return mime_type.lower() in ('application/ogg', 'video/mp4', 'video/webm')


def is_image(mime_type: str) -> bool:
    return mime_type.lower() in ('image/jpeg', 'image/png', 'image/gif')


def is_animated_gif(content: bytes) -> bool:
    pattern = b'\x21\xF9\x04[\x00-\xFF]{4}\x00[\x2C\x21]'
    return get_mime_type(content) == 'image/gif' \
        and len(re.findall(pattern, content)) > 1
