#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import re
import sys
import zipfile
import subprocess
from urllib import request, parse
from time import strftime, localtime

target_version = "3.2.3"
language = "zh"
cwd = sys.path[0]
src = f"{cwd + os.sep}src{os.sep}"
dist = f"{cwd + os.sep}dist{os.sep}"
ini = f"{dist}package.ini"
translated = re.compile(r"(?:Generated\s)(\d+)(?:\stranslation)")
untranslated = re.compile(r"(?:Ignored\s)(\d+)(?:\suntranslated)")


def make_release():
    if os.name == 'nt':
        lrelease = 'C:/Qt/Qt5.6.3/5.6.3/msvc2015_64/bin/lrelease.exe'  # On my laptop.
    else:  # os.name == 'posix'
        lrelease = 'lrelease'
    # source_file = [f[:-3] for f in os.listdir(src) if os.path.isfile(os.path.join(src, f)) and f[-5:-3] == language]
    source_file = [f[:-3] for f in os.listdir(src) if f[-5:-3] == language]
    release_file = []
    translated_count = 0
    total_count = 0

    for i in source_file:
        print(i)
        result = subprocess.run([lrelease, f'{src+i}.ts', '-qm', f'{dist+i}.qm'],
                                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        result_info = result.stdout.decode("utf-8")
        print(result_info)
        if result.returncode == 0:
            release_file.append(i+".qm")
            if i != "qt_zh":
                translated_count += int(translated.findall(result_info)[0])
                total_count += int(translated.findall(result_info)[0])
                untranslated_count = untranslated.findall(result_info)
                total_count += int(untranslated_count[0]) if len(untranslated_count) != 0 else 0
        else:
            print(result.stderr.decode("utf-8"))

        # except subprocess.CalledProcessError as err:
        #    print("lrelease error:")
        #    print(err)'''
    send_progress(translated_count, total_count)

    return release_file


def send_progress(done, total):
    percentage = round(done*100/total, 2)
    output = f"当前进度:\n{done}/{total}\n{percentage}%"
    print(output)
    try:
        telegram_push(output)
        print("\n推送完毕\n")
    except Exception as err:
        print(f"\n{err}\n推送失败\n")


def telegram_push(string):
    querystring = parse.urlencode({"text": string.encode('utf-8')})
    tg_api = os.getenv('TG_API')
    group_id = os.getenv('TG_GROUP_ID')
    url = f"https://api.telegram.org/bot{tg_api}/sendMessage?chat_id={group_id}&"
    request.urlopen(url + querystring)


def make_package(release_list):
    timestamp = strftime("%Y%m%d%H%M%S", localtime())
    print("Write package info to package.ini ...")
    with open(ini, "w", encoding="utf-8") as f:
        package_info = [f"Name = TeamSpeak 3 简体中文汉化包 软件版本:{target_version}",
                        "Type = Translation",
                        "Author = 寂听 & EdisonJwa",
                        f"Version = {timestamp}",
                        "Platforms = ",
                        'Description = 源代码: https://github.com/jitingcn/TS3-Translation_zh-CN']
        f.write("\n".join(package_info))

    file_name = 'Chinese_Translation_zh-CN.ts3_translation'
    print("Zip package ...")
    with zipfile.ZipFile(file_name, 'w', zipfile.ZIP_DEFLATED) as release:
        release.write(ini, "package.ini")
        for i in release_list:
            release.write(dist+i, f"translations/{i}")
        print("构建成功")


if __name__ == '__main__':
    if len(sys.argv) <= 1:
        print("Making .qm translations file ...")
        release_file_list = make_release()
        print("Making .ts3_translation release package ...")
        make_package(release_file_list)
    else:
        if sys.argv[1] == "1":
            telegram_push("部署成功")