namespace :gettext_simple_rails do
  task "all" => :environment do
    Rake::Task["gettext_simple_rails:generate_translator_files"].execute
  end
  
  task "generate_translator_files" => :environment do
    GettextSimpleRails::Translators.load_all.each do |translator_data|
      translator = translator_data[:class].new
      next unless translator.detected?
      
      translation_path = "#{GettextSimpleRails.translation_dir}/#{File.basename(translator_data[:file], ".rb")}_translations.rb"
      
      puts "Generating translation for #{translator.class.name} in #{translation_path}"
      
      FileUtils.mkdir_p(File.dirname(translation_path)) unless File.exists?(File.dirname(translation_path))
      
      File.open(translation_path, "w") do |fp|
        fp.puts "class GettextSimpleRails::MonthNames"
        fp.puts "  def translations"
        
        GettextSimpleRails.write_recursive_translations(fp, translator.translations)
        
        fp.puts "  end"
        fp.puts "end"
      end
    end
  end
  
  task "create" => :environment do
    require "fileutils"
    I18n.available_locales.each do |locale|
      dir_path = "#{Rails.root}/config/locales_gettext/#{locale}/LC_MESSAGES"
      file_path = "#{dir_path}/default.po"
      
      if File.exists?(file_path)
        puts "Skipping #{locale} because a .po-file already exists in: #{file_path}"
        next
      end
      
      FileUtils.mkdir_p(dir_path) unless File.exists?(dir_path)
      
      project_name = Rails.application.class.parent_name
      
      content = File.read("#{File.dirname(__FILE__)}/../../config/default.po")
      content.gsub!("%{PROJECT_NAME}", project_name)
      content.gsub!("%{LOCALE}", locale.to_s)
      
      File.open(file_path, "w") do |fp|
        fp.write(content)
      end
      
      puts "Created default config for #{locale} in: #{file_path}"
    end
  end
  
  task "create_poedit_ruby_parser" do
    setup_helper = GettextSimpleRails::SetupHelper.new
    raise "POEdit config file could not be found in: #{setup_helper.poedit_config_path}" unless File.exists?(setup_helper.poedit_config_path)
    
    if setup_helper.poedit_config_has_ruby_parser?
      puts "Ruby parser already exists."
    else
      setup_helper.poedit_add_ruby_parser_to_config
      puts "Added Ruby-parser to config."
    end
    
    if setup_helper.poedit_config_has_ruby_in_list_of_parsers?
      puts "Ruby already in list of parsers."
    else
      setup_helper.poedit_config_add_ruby_to_list_of_parsers
      puts "Added Ruby to list of parsers."
    end
  end
  
  task "generate_static_translation_file" => :environment do
    cache_handler = GettextSimpleRails::CacheHandler.new
    cache_handler.write_static_translation_file
    
    puts "Static translation file saved in #{cache_handler.static_cache_file_path}"
  end
end
