# -*- coding: utf-8 -*-

class Description:
    '''Parsed description representation
    '''
    MAP_CATEGORY_TO_LABEL = {
        'New Feature': 'pr-feature',
        'Bug Fix': 'pr-bugfix',
        'Improvement': 'pr-improvement',
        'Performance Improvement': 'pr-performance',
        # 'Backward Incompatible Change': doesn't match anything
        'Build/Testing/Packaging Improvement': 'pr-build',
        'Non-significant (changelog entry is not needed)': 'pr-non-significant',
        'Non-significant (changelog entry is not required)': 'pr-non-significant',
        'Non-significant': 'pr-non-significant',
        'Documentation (changelog entry is not required)': 'pr-documentation',
        # 'Other': doesn't match anything
    }

    def __init__(self, pull_request):
        self.label_name = str()
        self.legal = False

        self._parse(pull_request['bodyText'])

    def _parse(self, text):
        lines = text.splitlines()
        next_category = False
        category = str()

        for line in lines:
            stripped = line.strip()

            if not stripped:
                continue

            if next_category:
                category = stripped
                next_category = False

            if stripped == 'I hereby agree to the terms of the CLA available at: [placeholder]':
                self.legal = True

            category_headers = (
                'Category (leave one):',
                'Changelog category (leave one):',
                'Changelog category:',
                'Category:'
            )

            if stripped in category_headers:
                next_category = True

        if category in Description.MAP_CATEGORY_TO_LABEL:
            self.label_name = Description.MAP_CATEGORY_TO_LABEL[category]
        else:
            if not category:
                print('Cannot find category in pr description')
            else:
                print(('Unknown category: ' + category))
