#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Script to generate the template file and update the translation files.
#
# Copyright (C) 2019 Joachim Stolberg
# LGPLv2.1+
# 
# Copy the script into the mod root folder and adapt the last code lines to you needs.

from __future__ import print_function
import os, fnmatch, re, shutil

pattern_lua = re.compile(r'[ \.=^\t]S\("(.+?)"\)', re.DOTALL)
pattern_tr = re.compile(r'(.+?[^@])=(.+)')

def gen_template(templ_file, lkeyStrings):
    lOut = []
    lkeyStrings.sort()
    for s in lkeyStrings:
        lOut.append("%s=" % s)
    open(templ_file, "wt").write("\n".join(lOut))

def read_lua_file_strings(lua_file):
    lOut = []
    text = open(lua_file).read()
    for s in pattern_lua.findall(text):
        s = re.sub(r'"\.\.\s+"', "", s)
        s = re.sub("@[^@=n]", "@@", s)
        s = s.replace("\n", "@n")
        s = s.replace("\\n", "@n")
        s = s.replace("=", "@=")
        lOut.append(s)
    return lOut

def inport_tr_file(tr_file):
    dOut = {}
    if os.path.exists(tr_file):
        for line in open(tr_file, "r").readlines():
            s = line.strip()
            if s == "" or s[0] == "#":
                 continue
            match = pattern_tr.match(s)
            if match:
                dOut[match.group(1)] = match.group(2)
    return dOut

def generate_template(templ_file):
    lOut = []
    for root, dirs, files in os.walk('./'):
        for name in files:
            if fnmatch.fnmatch(name, "*.lua"):
                fname = os.path.join(root, name)
                found = read_lua_file_strings(fname)
                print(fname, len(found))
                lOut.extend(found)
    lOut = list(set(lOut))
    lOut.sort()
    gen_template(templ_file, lOut)
    return lOut

def update_tr_file(lNew, mod_name, tr_file):
    lOut = ["# textdomain: %s\n" % mod_name]
    if os.path.exists(tr_file):
        shutil.copyfile(tr_file, tr_file+".old")
    dOld = inport_tr_file(tr_file)
    for key in lNew:
        val = dOld.get(key, "")
        lOut.append("%s=%s" % (key, val))
    lOut.append("##### not used anymore #####")
    for key in dOld:
        if key not in lNew:
            lOut.append("%s=%s" % (key, dOld[key]))
    open(tr_file, "w").write("\n".join(lOut))
    
data = generate_template("./locale/template.txt")
update_tr_file(data, "minecart", "./locale/minecart.de.tr")
print("Done.\n")

