# ---------------------------------------
#  $Revision: #3 $
#  $Change: 19194 $
# ---------------------------------------

import re

RGX_CC_YEAR = re.compile('CC (\d{4})')

# --------------------------------------------------------------------
# map the Adobe build numbers (12.1, 14.2, etc) to release names
# ('CC', 'CC 2015.3', etc...) used in the installation paths
#
# version map from https://en.wikipedia.org/wiki/Adobe_After_Effects
# --------------------------------------------------------------------
AE_VERSION_MAP = {
    10: {
        0: 'CS5',
        5: 'CS5.5'
    },
    11: {
        0: 'CS6'
    },
    12: {
        0: 'CC'
    },
    13: {
        0: 'CC 2014',
        5: 'CC 2015',
        8: 'CC 2015.3',
    },
    14: {
        0: 'CC 2017',
    },
    15: {
        0: 'CC 2018',
    }
}


# =========================================================
#  map the Adobe build numbers (12.1, 14.2, etc) to
#  AE release names used in the installation paths
# =========================================================
def get_ae_release(build_major, build_minor):
    release_name = ''
    build_major_map = AE_VERSION_MAP.get(build_major)
    
    if build_major_map is None:
        # -----------------------------------------------------
        #  fake it and increment the latest major by 1 year
        # -----------------------------------------------------
        latest_major_map = AE_VERSION_MAP[max(AE_VERSION_MAP)]
        latest_release = latest_major_map[max(latest_major_map)]
        try:
            latest_year = int(RGX_CC_YEAR.search(latest_release).group(1))
            latest_release = 'CC %s' % (latest_year + 1,)
        except (AttributeError, TypeError):
            pass
        
        release_name = latest_release
    
    elif build_minor in build_major_map:
        release_name = build_major_map[build_minor]
    
    else:
        for k in sorted(build_major_map, reverse=True):
            if build_minor >= k:
                release_name = build_major_map[k]
                break
    
    return release_name


def get_ae_release_list():
    """
    return a list of AE releases, sorted in descending order by build version
    """
    releases = list()
    for major in sorted(AE_VERSION_MAP.keys()):
        for minor in sorted(AE_VERSION_MAP[major].keys()):
            releases.append(AE_VERSION_MAP[major][minor])
            
    releases.reverse()
    return releases

