#!/usr/bin/env python

from argparse import ArgumentParser
from logging import basicConfig, DEBUG
from pathlib import Path

from more_itertools import chunked


def generate(out):
    lst = ['DRS_fail'] * 128
    lst[ord('n')] = 'DRS_null'
    lst[ord('t')] = 'DRS_true'
    lst[ord('f')] = 'DRS_false'
    lst[ord('I')] = 'DRS_inf'
    lst[ord('N')] = 'DRS_nan'
    lst[ord('"')] = 'DRS_string'
    lst[ord("'")] = 'DRS_string'
    lst[ord('{')] = 'DRS_recursive'
    lst[ord('[')] = 'DRS_recursive'
    for c in '+-.0123456789':
        lst[ord(c)] = 'DRS_number'

    print('#ifndef JSON5EncoderCpp_decoder_recursive_select', file=out)
    print('#define JSON5EncoderCpp_decoder_recursive_select', file=out)
    print(file=out)
    print('// GENERATED FILE', file=out)
    print('// All changes will be lost.', file=out)
    print(file=out)
    print('#include <cstdint>', file=out)
    print(file=out)
    print('namespace JSON5EncoderCpp {', file=out)
    print('inline namespace {', file=out)
    print(file=out)
    print('enum DrsKind : std::uint8_t {', file=out)
    print('    DRS_fail, DRS_null, DRS_true, DRS_false, DRS_inf, DRS_nan, DRS_string, DRS_number, DRS_recursive', file=out)
    print('};', file=out)
    print(file=out)
    print('static const DrsKind drs_lookup[128] = {', file=out)
    for chunk in chunked(lst, 8):
        print('   ', end='', file=out)
        for t in chunk:
            print(' ', t, ',', sep='', end='', file=out)
        print(file=out)
    print('};', file=out)
    print(file=out)
    print('}  // anonymous inline namespace', sep='', file=out)
    print('}  // namespace JSON5EncoderCpp', sep='', file=out)
    print(file=out)
    print('#endif', sep='', file=out)


argparser = ArgumentParser(description='Generate src/_decoder_recursive_select.hpp')
argparser.add_argument('input', nargs='?', type=Path, default=Path('src/_decoder_recursive_select.hpp'))

if __name__ == '__main__':
    basicConfig(level=DEBUG)
    args = argparser.parse_args()
    with open(str(args.input.resolve()), 'wt') as out:
        generate(out)

