#!/usr/bin/env python3

# Sync Language Packs
# Script to synchronize each language pack's items against Wowchemy's master pack (English).
# https://wowchemy.com
#
# Prerequisites: pip3 install PyYAML
#
# TODO: Switch from PyYAML to Ruamel in order to load/dump comments -
#  see https://stackoverflow.com/questions/47382227/python-yaml-update-preserving-order-and-comments

import copy
from pathlib import Path
import yaml

I18N_PATH = Path(__file__).resolve().parent.parent.joinpath('wowchemy').joinpath('i18n')
MASTER_PACK = I18N_PATH.joinpath('en.yaml')


# Load master language pack (English).
with open(MASTER_PACK) as f:
  master_map = yaml.safe_load(f)
  # if (DEBUG)
  #   print(master_map)

# Iterate over each child language pack.
cnt = 0
for filename in Path(I18N_PATH).glob("*.yaml"):
  if filename.stem != 'en':
    i18n_file = I18N_PATH.joinpath(filename)
    print(f"Processing {i18n_file} ...")

    # Load a child language pack.
    with open(i18n_file) as f:
      child_map = yaml.safe_load(f)

    # Synchronize the language pack's structure against the master language pack.
    tmp_map = copy.deepcopy(master_map)  # Make a temporary deep copy of the master map (list of objects).
    master_index = 0
    for master_item in master_map:
      translation = next((item['translation'] for item in child_map if item['id'] == master_item['id']),
                         master_item['translation'])
      tmp_map[master_index]['translation'] = translation
      master_index += 1

    # Write the synced language pack to file.
    with open(i18n_file, 'w') as f:
      # PyYAML will break lines unless a large column `width` is set.
      # To standardise with single quotes, add: `, default_style='\''`.
      # No option to only enforce single quotes when YAML string wrapped in quotes?
      yaml.dump(tmp_map, f, allow_unicode=True, width=float("inf"))
    cnt += 1

# Print results.
print(f"{cnt} child language packs successfully synchronized!")