#!/usr/bin/env python3

import os
import shutil
import subprocess
import sys
import time
import urllib.request
import zipfile

# Check Crowdin API Key

try:
   api_key = sys.argv[1]  # IndexError, if no key is given
   if not api_key:   # if key is empty
      raise ValueError
except IndexError:
    print('Please provide Crowdin API Key!')
    raise
except ValueError:
    print("Crowdin API Key can't be empty!")
    raise

# Apply Crowdin API Key
crowdin_config_file = open('crowdin.yaml', 'r')
crowdin_config = crowdin_config_file.read()
crowdin_config_file.close()
crowdin_config = crowdin_config.replace('_secret_', api_key)
crowdin_config_file = open('crowdin.yaml', 'w')
crowdin_config_file.write(crowdin_config)
crowdin_config_file.close()

try:  # catch any exception after crowdin.yaml was changed
    # Download Crowdin CLI
    dir_path = os.path.dirname(os.path.realpath(__file__))

    jar_name = 'crowdin-cli.jar'

    if not os.path.isfile(jar_name):
       print('download crowdin-cli.jar')
       crowdin_cli_file = 'crowdin-cli.zip'
       crowdin_cli_url = 'https://downloads.crowdin.com/cli/v3/' + crowdin_cli_file
       urllib.request.urlretrieve(crowdin_cli_url, crowdin_cli_file)
       with zipfile.ZipFile(crowdin_cli_file, 'r') as zip_ref:
          jar_dir = zip_ref.namelist()[0]
          for file in zip_ref.namelist():
             if file.endswith(jar_name):
                jar_file = file
          zip_ref.extract(jar_file)
          os.rename(jar_file, jar_name)
          os.remove(crowdin_cli_file)
          shutil.rmtree(jar_dir)

    print('convert *.h to *.json')
    for item in os.listdir(dir_path):
        if item.endswith(".h"):
            subprocess.run(['python3', 'h2json.py', item])

    print('upload source *.json')
    subprocess.run(['java', '-jar', 'crowdin-cli.jar', 'upload', 'sources'])

    print('wait for crowdin server to process data')
    time.sleep(10)

    print('download translation *.json')
    subprocess.run(['java', '-jar', 'crowdin-cli.jar', 'download'])

    print('convert *.json to *.h')
    for file in os.listdir(dir_path):
        if file.startswith('msg_hash_') and file.endswith('.json'):
            print(file)
            subprocess.run(['python3', 'json2h.py', file])

    print('fetch translation progress')
    subprocess.run(['python3', 'fetch_progress.py'])

    # Reset Crowdin API Key
    crowdin_config_file = open('crowdin.yaml', 'r')
    crowdin_config = crowdin_config_file.read()
    crowdin_config_file.close()
    crowdin_config = crowdin_config.replace(api_key, '_secret_')
    crowdin_config_file = open('crowdin.yaml', 'w')
    crowdin_config_file.write(crowdin_config)
    crowdin_config_file.close()
except:
    # Reset Crowdin API Key no matter what
    crowdin_config_file = open('crowdin.yaml', 'r')
    crowdin_config = crowdin_config_file.read()
    crowdin_config_file.close()
    crowdin_config = crowdin_config.replace(api_key, '_secret_')
    crowdin_config_file = open('crowdin.yaml', 'w')
    crowdin_config_file.write(crowdin_config)
    crowdin_config_file.close()
    raise