#!/usr/bin/python
# -*- coding: utf-8 -*-

# --------------------------------------------------------------------------- #
#                                                                             #
#    Locale generator for iSida Jabber Bot                                    #
#    Copyright (C) diSabler <dsy@dsy.name>                                    #
#                                                                             #
#    This program is free software: you can redistribute it and/or modify     #
#    it under the terms of the GNU General Public License as published by     #
#    the Free Software Foundation, either version 3 of the License, or        #
#    (at your option) any later version.                                      #
#                                                                             #
#    This program is distributed in the hope that it will be useful,          #
#    but WITHOUT ANY WARRANTY; without even the implied warranty of           #
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            #
#    GNU General Public License for more details.                             #
#                                                                             #
#    You should have received a copy of the GNU General Public License        #
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.    #
#                                                                             #
# --------------------------------------------------------------------------- #

import os,re,time,sys

sys.path = ['../../lib'] + sys.path

def L(t): return t

def GT(t):
    if t in ['wot_appid','disco_exclude','lfm_api']: return ''
    elif t in ['html_logs_enable']: return 0
    elif t == 'wot_region': return 'RU'
    else: return None

def readfile(filename):
    fp = file(filename)
    data = fp.read()
    fp.close()
    return data

def writefile(filename, data):
    fp = file(filename, 'wb')
    fp.write(data)
    fp.close()

def regenerate(ptl,locale_name):
    global execute,exec_yes,comms
    def L(text):
        if not len(text): return text
        try: return locales[text]
        except: return text
    path_to_locale = '%s/%s' % (ptl,locale_name)
    root_files = os.listdir(path_to_source)
    plugins_files = os.listdir(path_to_plugins)
    plugins_files.sort()
    file_list,localez = [],[]
    regex = r'L\(u?\'(.*?)\'[,|\)]'

    for tmp in root_files:
        if tmp[-3:] == '.py' and tmp[0] not in ['.','_']: file_list.append('%s/%s' % (path_to_source,tmp))

    for tmp in plugins_files:
        if tmp[-3:] == '.py' and tmp[0] not in ['.','_']: file_list.append('%s/%s' % (path_to_plugins,tmp))

    locales = {}

    if os.path.isfile(path_to_locale):
        lf = readfile(path_to_locale).decode('UTF').replace('\r','').split('\n')
        for c in lf:
            if ('#' not in c[:3]) and len(c) and '\t' in c: locales[c.split('\t',1)[0]] = c.split('\t',1)[1]
    else: print 'Locale not found!'

    result = locale_header + '\n\n'

    error_count = 0

    for tmp in file_list:
        execute,exec_yes,comms = [],[],[]
        if 'plugin' in tmp: execfile(tmp,globals())
        body = str(readfile(tmp)).replace('\\\'','\'').replace('\\\"','\"').replace('\\\\','\\')
        tm = re.findall(regex,body,re.S+re.U)
        for t in execute+exec_yes+comms: tm.append(t[4].replace('\n','\\n'))
        tm2 = re.findall('# translate: (.*)',body)
        if tm2: tm2 = tm2[0].split(',')
        if tm or tm2:
            for tmp2 in tm:
                if tmp2 not in localez:
                    localez.append(tmp2)
                    tm2.append(tmp2)
            if tm2:
                result += '%s%s\n' % (file_mark,'/'.join(tmp.split('/')[2:]))
                for tmp2 in tm2:
                    tr = L(tmp2)
                    if tmp2 == tr:
                        error_count += 1
                        loc = locale_mark
                    else: loc = tr
                    result += '%s\t%s\n' % (tmp2,loc)
                result += '\n'

    execfile(path_to_mainpy,globals())
    tm2 = []
    for t in config_prefs.keys():
        if config_prefs[t][0] not in localez:
            localez.append(config_prefs[t][0])
            tm2.append(config_prefs[t][0])
        if config_prefs[t][1] not in localez:
            localez.append(config_prefs[t][1])
            tm2.append(config_prefs[t][1])
        
    for t in config_groups:
        if t[0] not in localez: 
            localez.append(t[0])
            tm2.append(t[0])
        
    for t in owner_prefs.keys():
        if owner_prefs[t][0] not in localez: 
            localez.append(owner_prefs[t][0])
            tm2.append(owner_prefs[t][0])
        
    for t in owner_groups:
        if t[0] not in localez:
            localez.append(t[0])
            tm2.append(t[0])

    if tm2:
        result += '%s%s\n' % (file_mark,'Generic')
        for tmp2 in tm2:
            tr = L(tmp2)
            if tmp2 == tr:
                error_count += 1
                loc = locale_mark
            else: loc = tr
            result += '%s\t%s\n' % (tmp2,loc)
        result += '\n'
            
    result += '# write locale file: %s' % locale_name
    result += '\n# total: %s' % len(localez)

    msg = 'write locale file: %s' % locale_name
    if error_count:
        msg += '\nmissed translations: %s\n' % error_count
        result += '\n# missed translations: %s\n' % error_count
    else:
        msg += '\nregenarated without mistakes!\n'
        result += '\n# regenarated without mistakes!\n'
        
    return msg, result, len(localez)

path_to_source = '../..'
path_to_locale = '%s/data/locales/' % path_to_source
path_to_plugins = '%s/plugins' % path_to_source
path_to_mainpy = '%s/main.py' % path_to_plugins

smiles_dirs = []
data_folder = path_to_source + '/data/%s'
loc_folder     = data_folder % 'locales/%s.txt'
log_folder     = data_folder % 'conflogs/%s'
public_log = log_folder % 'chatlogs/%s'
system_log = log_folder % 'syslogs/%s'
gactmessage = []
base_type = 'pgsql'
    
locale_mark = 'NO_TRANSLATE'
file_mark = '# file: '
locale_header = '''#---------------------------------------------
#      Autogenerate for locales
#    (c) Disabler Production Lab.
#---------------------------------------------'''

smiles_dirs_case = logs_css_path = ''
execute,exec_yes,comms = [],[],[]

if __name__ == "__main__" :
    print '\n',locale_header.replace('#',''),'\n'
    lf = os.listdir(path_to_locale)
    for tmp in lf:
        if tmp[-4:] == '.txt':
            msg, result, lz = regenerate(path_to_locale,tmp)
            writefile(tmp,'%s\n' % result.encode('utf-8'))
            print msg
    print 'Total found definitions: %s\n' % lz
    print 'Done!'
