# encoding: utf-8

require 'yaml'

desc "show the current translation status"
task "i18n:generate_pseudolocale" => :environment do

  def pseudolocalize(str)
    n = 0
    newstr = ""
    str.each_char { |c|
      if c == "{"
        n += 1
      elsif c == "}"
        n -= 1
      end

      if n < 1
        newstr += c.tr("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
                       "áƀčďéƒǧĥíʲǩłɱɳóƿƣřšťůνŵхýžÁƁČĎÉƑǦĤÍǰǨŁϺЍÓРƢŘŠŤŮѶŴХÝŽ")
      else
        newstr += c
      end
    }
    return "[[ #{newstr} ]]"
  end

  def transform(p)
    if p.kind_of?(Hash)
      newhash = Hash.new
      p.each { |key, value| newhash[key] = transform(value) }
      return newhash
    elsif p.kind_of?(String)
      return pseudolocalize(p)
    else
      raise "Oops, unknown thing in the YML"
    end
  end

  def process_file(basename, locale, &block)
    strings = YAML.load_file("#{Rails.root}/config/locales/#{basename}.#{locale}.yml")
    new_strings = transform(strings)
    new_strings = Hash["pseudo" => new_strings[locale]]
    yield new_strings, strings if block_given?
    File.open("#{Rails.root}/config/locales/#{basename}.pseudo.yml", 'w+' ) do |f|
      f.puts new_strings.to_yaml
    end
  end

  process_file("client", "en")
  process_file("server", "en") { |new,orig| new["pseudo"]["time"] = orig["en"]["time"] }

end