#!/usr/bin/env python3

import os
import re
import yaml

ignored = [
    'matrix_synapse_default_room_version',
]
prefixes = [
    'matrix_',
    'custom_',
    'int_',
    'synapse_default_',
    'synapse_ext_',
    'mailer_container_',
    'bot_',
    'client_',
    'mautrix_',
    'devture_',
    'beeper_',
    'backup_borg_',
]
suffixes = [
    '_version',
]


def find_versions():
    matches = {}
    for root, dirs, files in os.walk('.'):
        if root.endswith('defaults'):
            for file in files:
                if file.endswith('main.yml'):
                    path = os.path.join(root, file)
                    with open(path, 'r') as f:
                        data = yaml.safe_load(f)
                        for key, value in data.items():
                            if key.endswith('_version') and value and not re.search(r'{{|master|main|""', str(value)) and key not in ignored:
                                sanitized_key = sanitize_key(key)
                                matches[sanitized_key] = value
    return matches


def sanitize_key(key):
    for prefix in prefixes:
        key = key.removeprefix(prefix)
    for suffix in suffixes:
        key = key.removesuffix(suffix)
    return key.replace('_', ' ').title()


def generate_versions():
    versions = find_versions()
    with open(os.path.join(os.getcwd(), 'VERSIONS.md'), 'w') as f:
        for key, value in sorted(versions.items()):
            f.write(f'* {key}: {value}\n')


if __name__ == "__main__":
    generate_versions()