# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/

class TextModule < ApplicationModel
  include ChecksClientNotification
  include ChecksHtmlSanitized

  validates :name,    presence: true
  validates :content, presence: true

  sanitized_html :content

=begin

load text modules from online

  TextModule.load('de-de', overwrite_existing_item) # e. g. 'en-us' or 'de-de'

=end

  def self.load(locale, overwrite_existing_item = false)
    raise 'Got no locale' if locale.empty?
    locale = locale.split(',').first.downcase # in case of accept_language header is given
    url = "https://i18n.zammad.com/api/v1/text_modules/#{locale}"

    result = UserAgent.get(
      url,
      {},
      {
        json: true,
      }
    )

    raise "Can't load text modules from #{url}" if !result
    raise "Can't load text modules from #{url}: #{result.error}" if !result.success?

    ActiveRecord::Base.transaction do
      result.data.each { |text_module|
        exists = TextModule.find_by(foreign_id: text_module['foreign_id'])
        if exists
          next if !overwrite_existing_item
          exists.update(text_module.symbolize_keys!)
        else
          text_module[:updated_by_id] = 1
          text_module[:created_by_id] = 1
          TextModule.create(text_module.symbolize_keys!)
        end
      }
    end
    true
  end

=begin

push text_modules to online

  TextModule.push(locale)

=end

  def self.push(locale)

    # only push changed text_modules
    text_modules         = TextModule.all #where(locale: locale)
    text_modules_to_push = []
    text_modules.each { |text_module|
      next if !text_module.active
      text_modules_to_push.push text_module
    }

    return true if text_modules_to_push.empty?

    url = 'https://i18n.zammad.com/api/v1/text_modules/thanks_for_your_support'

    translator_key = Setting.get('translator_key')

    result = UserAgent.post(
      url,
      {
        locale: locale,
        text_modules: text_modules_to_push,
        fqdn: Setting.get('fqdn'),
        translator_key: translator_key,
      },
      {
        json: true,
        open_timeout: 6,
        read_timeout: 16,
      }
    )
    raise "Can't push text_modules to #{url}: #{result.error}" if !result.success?

    # set new translator_key if given
    if result.data['translator_key']
      translator_key = Setting.set('translator_key', result.data['translator_key'])
    end

    true
  end

end
