# encoding: utf-8 

namespace :migrate do
  
  task :i18n => :environment do
  
    p 'Start Bulletin'
    bulletins = Bulletin.admin_manager_all
    i = 1
    bulletins.each do |bulletin|
    	p "#{i}/#{bulletins.size} - #{bulletin.id}"
    	title = I18nVariable.first(:conditions => {:key => 'title', :language_value_id => bulletin.id, :language_value_type => bulletin.class})
    	bulletin.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
    	subtitle = I18nVariable.first(:conditions => {:key => 'subtitle', :language_value_id => bulletin.id, :language_value_type => bulletin.class})
    	bulletin.subtitle_translations = {'en' => subtitle['en'], 'zh_tw' => subtitle['zh_tw']} if subtitle
    	text = I18nVariable.first(:conditions => {:key => 'text', :language_value_id => bulletin.id, :language_value_type => bulletin.class})
    	bulletin.text_translations = {'en' => text['en'], 'zh_tw' => text['zh_tw']} if text
    	p bulletin.save(:validate => false)
    	i += 1
    end
    p 'End Bulletin'

    p '====================================================='

    p 'Start BulletinCategory'
    categories = BulletinCategory.admin_manager_all
    i = 1
    categories.each do |category|
    	p "#{i}/#{categories.size} - #{category.id}"
    	title = I18nVariable.first(:conditions => {:language_value_id => category.id, :language_value_type => category.class})
    	category.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
    	p category.save(:validate => false)
    	i += 1
    end
    p 'End BulletinCategory'

    p '====================================================='

    p 'Start BulletinFile'
    files = BulletinFile.all
    i = 1
    files.each do |file|
    	p "#{i}/#{files.size} - #{file.id}"
    	description = I18nVariable.first(:conditions => {:language_value_id => file.id, :language_value_type => file.class})
    	file.description_translations = {'en' => description['en'], 'zh_tw' => description['zh_tw']} if description
    	title = I18nVariable.first(:conditions => {:language_value_id => file.id, :language_value_type => file.class})
    	file.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
    	p file.save(:validate => false)
    	i += 1
    end
    p 'End BulletinFile'

    p '====================================================='

    p 'Start BulletinLink'
    links = BulletinLink.all
    i = 1
    links.each do |link|
      p "#{i}/#{links.size} - #{link.id}"
      title = I18nVariable.first(:conditions => {:language_value_id => link.id, :language_value_type => link.class})
      link.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      p link.save(:validate => false)
      i += 1
    end
    p 'End BulletinLink'

    p '====================================================='

    p 'Start UnitListForAnc'
    units = UnitListForAnc.all
    i = 1
    units.each do |unit|
      p "#{i}/#{units.size} - #{unit.id}"
      title = I18nVariable.first(:conditions => {:language_value_id => unit.id, :language_value_type => unit.class})
      unit.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      p unit.save(:validate => false)
      i += 1
    end
    p 'End UnitListForAnc'

    p '====================================================='
    p '====================================================='

    p 'Start PageContext'
    page_contexts = PageContext.all
    i = 1
    page_contexts.each do |page_context|
      p "#{i}/#{page_contexts.size} - #{page_context.id}"
      context = I18nVariable.first(:conditions => {:language_value_id => page_context.id, :language_value_type => page_context.class})
      page_context.context_translations = {'en' => context['en'], 'zh_tw' => context['zh_tw']} if context
      p page_context.save(:validate => false)
      i += 1
    end
    p 'End PageContext'

    p '====================================================='
    p '====================================================='

    p 'Start WebLink'
    links = WebLink.all
    i = 1
    links.each do |link|
      p "#{i}/#{links.size} - #{link.id}"
      # the original key was 'name'
      title = I18nVariable.first(:conditions => {:key => 'name', :language_value_id => link.id, :language_value_type => link.class})
      link.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      context = I18nVariable.first(:conditions => {:key => 'context', :language_value_id => link.id, :language_value_type => link.class})
      link.context_translations = {'en' => context['en'], 'zh_tw' => context['zh_tw']} if context
      p link.save(:validate => false)
      i += 1
    end
    p 'End WebLink'

    p '====================================================='

    p 'Start WebLinkCategory'
    categories = WebLinkCategory.admin_manager_all
    i = 1
    categories.each do |category|
      p "#{i}/#{categories.size} - #{category.id}"
      title = I18nVariable.first(:conditions => {:language_value_id => category.id, :language_value_type => category.class})
      category.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      p category.save(:validate => false)
      i += 1
    end
    p 'End WebLinkCategory'

    p '====================================================='
    p '====================================================='

    p 'Start Meta'
    metas = Meta.all
    i = 1
    metas.each do |meta|
      p "#{i}/#{metas.size} - #{meta.id}"
      title = I18nVariable.first(:conditions => {:language_value_id => meta.id, :language_value_type => meta.class})
      meta.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      p meta.save(:validate => false)
      i += 1
    end
    p 'End Meta'

    p '====================================================='
    p '====================================================='

    p 'Start Attribute'
    attributes = Attribute.all
    i = 1
    attributes.each do |attribute|
      p "#{i}/#{attributes.size} - #{attribute.id}"
      title = I18nVariable.first(:conditions => {:language_value_id => attribute.id, :language_value_type => attribute.class})
      attribute.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      p attribute.save(:validate => false)
      i += 1
    end
    p 'End Attribute'

    p '====================================================='

    p 'Start AttributeField'
    attribute_fields = AttributeField.all
    i = 1
    attribute_fields.each do |attribute_field|
      p "#{i}/#{attribute_fields.size} - #{attribute_field.id}"
      title = I18nVariable.first(:conditions => {:language_value_id => attribute_field.id, :language_value_type => attribute_field.class})
      attribute_field.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      p attribute_field.save(:validate => false)
      i += 1
    end
    p 'End AttributeField'

    p '====================================================='

    p 'Start Role'
    roles = Role.all
    i = 1
    roles.each do |role|
      p "#{i}/#{roles.size} - #{role.id}"
      title = I18nVariable.first(:conditions => {:language_value_id => role.id, :language_value_type => role.class})
      role.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      p role.save(:validate => false)
      i += 1
    end
    p 'End Role'

    p '====================================================='
    p '====================================================='

    p 'Start AdImage'
    ad_images = AdImage.all
    i = 1
    ad_images.each do |image|
      p "#{i}/#{ad_images.size} - #{image.id}"
      # no key is set and title = context, this is due to original error in the code
      title = I18nVariable.first(:conditions => {:language_value_id => image.id, :language_value_type => image.class})
      image.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      image.context_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      p image.save(:validate => false)
      i += 1
    end
    p 'End AdImage'

    p '====================================================='
    p '====================================================='

    p 'Start Asset'
    assets = Asset.all
    i = 1
    assets.each do |asset|
      p "#{i}/#{assets.size} - #{asset.id}"
      title = I18nVariable.first(:conditions => {:key => 'title', :language_value_id => asset.id, :language_value_type => asset.class})
      asset.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      description = I18nVariable.first(:conditions => {:key => 'description', :language_value_id => asset.id, :language_value_type => asset.class})
      asset.description_translations = {'en' => description['en'], 'zh_tw' => description['zh_tw']} if description
      p asset.save(:validate => false)
      i += 1
    end
    p 'End Asset'

    p '====================================================='

    p 'Start AssetCategory'
    categories = AssetCategory.all
    i = 1
    categories.each do |category|
      p "#{i}/#{categories.size} - #{category.id}"
      title = I18nVariable.first(:conditions => {:language_value_id => category.id, :language_value_type => category.class})
      category.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      p category.save(:validate => false)
      i += 1
    end
    p 'End AssetCategory'

    p '====================================================='
    p '====================================================='

    p 'Start Item'
    items = Item.all
    i = 1
    items.each do |item|
      p "#{i}/#{items.size} - #{item.id}"
      title = I18nVariable.first(:conditions => {:language_value_id => item.id, :language_value_type => item.class})
      item.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      p item.save(:validate => false)
      i += 1
    end
    p 'End Item'

    p '====================================================='

    p 'Start Page'
    pages = Page.all
    i = 1
    pages.each do |item|
      p "#{i}/#{pages.size} - #{item.id}"
      # the key was originally 'title', changed to 'page_title' to avoit conflict with parent
      title = I18nVariable.first(:conditions => {:key => 'title', :language_value_id => item.id, :language_value_type => item.class})
      item.page_title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      p item.save(:validate => false)
      i += 1
    end
    p 'End Page'

    p '====================================================='

    p 'Start PagePart'
    page_parts = PagePart.all
    i = 1
    page_parts.each do |part|
      p "#{i}/#{page_parts.size} - #{part.id}"
      title = I18nVariable.first(:conditions => {:key => 'title', :language_value_id => part.id, :language_value_type => part.class})
      part.page_title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
      content = I18nVariable.first(:conditions => {:key => 'i18n_variable', :language_value_id => part.id, :language_value_type => part.class})
      part.content_translations = {'en' => content['en'], 'zh_tw' => content['zh_tw']} if content
      p part.save(:validate => false)
      i += 1
    end
    p 'End PagePart'

    p '====================================================='
    p '====================================================='

    p 'Start Site'
    site = Site.first
    title = I18nVariable.first(:conditions => {:key => 'title', :language_value_id => site.id, :language_value_type => site.class})
    site.title_translations = {'en' => title['en'], 'zh_tw' => title['zh_tw']} if title
    footer = I18nVariable.first(:conditions => {:key => 'footer', :language_value_id => site.id, :language_value_type => site.class})
    site.footer_translations = {'en' => footer['en'], 'zh_tw' => footer['zh_tw']} if footer
    sub_menu = I18nVariable.first(:conditions => {:key => 'sub_menu', :language_value_id => site.id, :language_value_type => site.class})
    site.sub_menu_translations = {'en' => sub_menu['en'], 'zh_tw' => sub_menu['zh_tw']} if sub_menu
    p site.save(:validate => false)
    p 'End Site'

  end


  task :news_p => :environment do
    news_bulletins = NewsBulletin.admin_manager_all rescue nil
    i = 1
    news_bulletins.each do |news|
      p "#{i}/#{news_bulletins.size} - #{news.id}"
      news.subtitle_translations = {'en' => (news.subtitle_translations['en'].gsub(/^\<p\>/, '').gsub(/\<\/p\>$/, '') rescue ''), 'zh_tw' => (news.subtitle_translations['zh_tw'].gsub(/^\<p\>/, '').gsub(/\<\/p\>$/, '') rescue nil)}
      p news.save(:validate => false) if news.changed?
      i += 1
    end if news_bulletins
  end

  task :sitemap_i18n => :environment do
    Item.all.each do |item|
      item.sitemap_enabled = item.sitemap_enabled ? {'en' => 'true', 'zh_tw' => 'true'} : nil
      item.save
    end
  end
  
  task :recreate_page_parts => :environment do
      Page.all.each do |page| 
        page.create_parts
        page.save
    end
  end


  task :add_widget_options_to_gallery => :environment do
      a = ModuleApp.where(:key=>'gallery').first
      a.widget_options = {"widget1"=>{"vertical"=>[1, 2], "horizontal"=>[1, 2, 3, 4, 5, 6]}}
      a.widget_options_fields_i18n = {"widget1"=>{"vertical"=>"gallery.widget_option.vertical", "horizontal"=>"gallery.widget_option.horizontal"}}
      a.save
    
  end

  task :clean_object_auth => :environment do
      ObjectAuth.destroy_all
  end

  task  :correct_gallery_widget => :environment do
      @module_app = ModuleApp.where(:key=>'gallery').first
      @module_app.widgets=["widget1"]
      @module_app.save
  end

end
