#!/usr/bin/env ruby

require 'bundler/inline'

gemfile(true) do
  gem 'translations-manager', git: 'https://github.com/discourse/translations-manager.git'
end

require 'translations_manager'

def expand_path(path)
  File.expand_path("../../#{path}", __FILE__)
end

def supported_locales
  Dir.glob(expand_path('config/locales/client.*.yml'))
    .map { |x| x.split('.')[-2] }
    .select { |x| x != 'en' }
    .sort - TranslationsManager::BROKEN_LOCALES
end

YML_DIRS = ['config/locales',
            'plugins/poll/config/locales',
            'plugins/discourse-details/config/locales',
            'plugins/discourse-local-dates/config/locales',
            'plugins/discourse-narrative-bot/config/locales',
            'plugins/discourse-nginx-performance-report/config/locales',
            'plugins/discourse-presence/config/locales'].map { |dir| expand_path(dir) }
YML_FILE_PREFIXES = ['server', 'client']
TX_CONFIG = expand_path('.tx/config')
JS_LOCALE_DIR = expand_path('app/assets/javascripts/locales')

if ARGV.empty? && TranslationsManager::SUPPORTED_LOCALES != supported_locales
  STDERR.puts <<~MESSAGE

    The supported locales are out of sync.
    Please update the TranslationsManager::SUPPORTED_LOCALES in translations-manager.
    https://github.com/discourse/translations-manager

    The following locales are currently supported by Discourse:

  MESSAGE

  STDERR.puts supported_locales.map { |l| "'#{l}'" }.join(",\n")
  exit 1
end

TranslationsManager::TransifexUpdater.new(YML_DIRS, YML_FILE_PREFIXES, *ARGV).perform(tx_config_filename: TX_CONFIG)

TranslationsManager::SUPPORTED_LOCALES.each do |locale|
  filename = File.join(JS_LOCALE_DIR, "#{locale}.js.erb")
  next if File.exists?(filename)

  File.write(filename, <<~ERB)
    //= depend_on 'client.#{locale}.yml'
    //= require locales/i18n
    <%= JsLocaleHelper.output_locale(:#{locale}) %>
  ERB
end