# -*- coding: utf-8 -*-
import os
import re
import json
import pprint

OLD_PATH = '/root/opensource/tools/scripts/md_csv/data/old/'
NEW_PATH = '/root/opensource/tools/scripts/md_csv/data/new/'

log_dict = json.loads(open('dict.json', 'r').read())

def getFiles(path):
    files = []
    for f in os.listdir(path):
        files.append(f)
#        if os.path.isfile(path + '/' + f) and f.find('log_') >= 0:
#            files.append(f)
    return files

def convertOldEvent(oldJson):
    assert(oldJson['#event_name'] != '')
    event_name = oldJson['#event_name']
    strings = event_name.split('_')
    assert(len(strings) == 3)
    finally_event_name = strings[1] + '-' + strings[2]
    if not (finally_event_name in log_dict):
        return
    node = log_dict[finally_event_name]
    assert(node != None)
    properties = oldJson['properties']
    for i in range(1, 20):
        strKey = 'str' + str(i)
        numKey = 'num' + str(i)
        if strKey in properties:
            assert(strKey in node)
            properties[node[strKey]['en_name']] = properties[strKey]
            del properties[strKey]
        if numKey in properties:
            if numKey not in node:
                print(numKey, node, oldJson)
            assert(numKey in node)
            properties[node[numKey]['en_name']] = properties[numKey]
            del properties[numKey]
    #end for
    if 'ext' in properties:
        ext = properties['ext']
        if isinstance(ext, str):
            rawdata = ext.encode('utf8')
        else:
            ext = json.dumps(ext)
            rawdata = ext.encode('utf8')
        if len(rawdata) <= 1024 * 2:
            properties['ext1'] = rawdata.decode('utf8')
        else:
            assert(len(rawdata) <= 1024 * 4)
            ext1 = ext[0:2000].encode('utf8')
            ext2 = ext[2000:].encode('utf8')
            print(len(ext1), len(ext2), len(rawdata))
            assert(len(ext1) + len(ext2) == len(rawdata))
            assert(len(ext1) <= 1024 * 2 and len(ext2) <= 1024 * 2)
            properties['ext1'] = ext1.decode('utf8')
            properties['ext2'] = ext2.decode('utf8')
        #endif
        del properties['ext']

def convert_newjson(gameid):
    files = getFiles(OLD_PATH + gameid)
    for f in files:
        print(f)
        new_file = open(NEW_PATH + gameid + '/' + f, 'w')
        for line in open(OLD_PATH + gameid + '/' + f, 'r'):
            jsonObj = json.loads(line)
            assert(jsonObj['#type'] in ['track', 'user_add', 'user_set', 'user_setOnce'])
            if jsonObj['#type'] == 'track':
                convertOldEvent(jsonObj)
                new_file.write(json.dumps(jsonObj) + '\n')
            elif jsonObj['#type'] == 'user_add':
                properties = jsonObj['properties']
                if 'account_id' in properties:
                    del properties['account_id']
                new_file.write(json.dumps(jsonObj) + '\n')
            else:
                new_file.write(line + '\n')

convert_newjson('1003')
convert_newjson('1004')
convert_newjson('1011')
