# -*- coding: utf-8 -*-
namespace 'transifex' do
  task 'upload' do
    require 'tmpdir'
    require 'httpclient'
    require 'json'
    require 'pp'
    require 'set'
    require_relative '../core/boot/option'
    require_relative '../core/miquire'
    require_relative 'transifex'

    miquire :boot, 'delayer'
    miquire :core, "miquire_plugin"

    project_name = ENV['TRANSIFEX_PROJECT_NAME']

    Dir.mktmpdir('mikutter-transifex-upload') do |confroot|
      Mopt.parse(["--confroot=#{confroot}"], exec_command: false)
      project = Transifex.project_detail(project_name)
      existing_resource_slugs = Set.new(project[:resources].map{|res|res[:slug].to_sym})
      Miquire::Plugin.loadpath << Environment::PLUGIN_PATH << File.join(__dir__, "..", "plugin")
      Miquire::Plugin.each_spec do |spec|
        pot_path = File.join(spec[:path], 'po', "#{spec[:slug]}.pot")
        next unless FileTest.exist?(pot_path)
        slug = spec[:slug] == :settings ? 'settings-1' : spec[:slug]
        if existing_resource_slugs.include? slug.to_sym
          puts "Update #{slug}"
          pp Transifex.resource_update(project_name: project_name,
                                       slug: slug,
                                       content: File.open(pot_path).map(&:chomp).reject{|l|
                                         l == '"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"'
                                       }.reject{|l|
                                         l == '#, fuzzy'
                                       }.join("\n")
                                      )
        else
          puts "Create #{spec[:slug]}"
          pp Transifex.resource_create(project_name: project_name,
                                       slug: slug,
                                       name: spec[:slug], # 表示名を日本語にすると外人が核ミサイルを撃ってくるかもしれない
                                       content: File.open(pot_path).map(&:chomp).reject{|l|
                                         l == '"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"'
                                       }.reject{|l|
                                         l == '#, fuzzy'
                                       }.join("\n")
                                      )
        end
      end
    end
  end
end

