#!/usr/bin/env python3
from __future__ import annotations

import os.path
import sys
import typing.re


def main() -> int:
    renames = [
        f'typing={value.__origin__.__module__}:{name}'
        for name, value in vars(typing).items()
        if hasattr(value, '__origin__')
        # TODO: still can't support symbol renaming
        if value.__origin__.__name__ == name
        # https://github.com/python/cpython/issues/87131
        if name != 'Callable'
    ] + [
        f'typing.re={value.__origin__.__module__}:{name}'
        for name, value in vars(typing.re).items()
        if hasattr(value, '__origin__')
        # TODO: still can't support symbol renaming
        if value.__origin__.__name__ == name
    ]

    print(f'# GENERATED VIA {os.path.basename(sys.argv[0])}')
    print('REPLACES[(3, 9)].update((')
    for rename in sorted(renames, key=lambda s: s.split('=')):
        print(f'    {rename!r},')
    print('))')
    print("REPLACES[(3, 10)].add('typing=collections.abc:Callable')")
    print('# END GENERATED')

    return 0


if __name__ == '__main__':
    raise SystemExit(main())
