# encoding: utf-8
class CustomBulletinsController < ApplicationController
  before_filter :set_I18n
  def get_custom_bulletins
    page = Page.where(:module => "custom_announcement").first rescue nil

    # 頁次
    page_num = params[:page_num].blank? ? 0 : params[:page_num].to_i
    # 每頁顯示的則數
    per_page = params[:per_page].blank? ? 10 : params[:per_page].to_i
    per_page = per_page > 0 ? per_page : 10

    I18n.locale = :zh_tw
    if !params[:keyword].blank?
      keyword = Regexp.new(".*"+params[:keyword]+".*")
      custom_bulletins = CustomBulletin.any_of({:title=>keyword},{:subtitle=>keyword},{:text=>keyword})
    else
      custom_bulletins = CustomBulletin.all
    end

    if !params[:category].blank?
      module_id = ModuleApp.where(:key=>"custom_announcement").first.id
      category = Regexp.new(".*"+params[:category]+".*")
      category_id = Category.where(:title => category, :module_app_id => module_id).first.id
      custom_bulletins = custom_bulletins.where(:category_id => category_id)
    else
      custom_bulletins = custom_bulletins
    end

    custom_bulletins = custom_bulletins.where(:is_preview.in=>[false,nil])
    custom_bulletins = custom_bulletins.where(:approved.ne => false , :rejected.ne => true)
    custom_bulletins = custom_bulletins.where(:postdate.lt=>Time.now)
    custom_bulletins = custom_bulletins.desc( :is_top, :postdate).page(page_num).per(per_page)

    custom_bulletins = custom_bulletins.collect do |b|
      image = request.protocol + request.host_with_port + b.image.url rescue nil

      links = b.custom_bulletin_links.collect do |bl|
        {
          "title" => bl.title_translations,
          "url" => bl.url
        }
      end rescue nil

      files = b.custom_bulletin_files.collect do |bf|
        file = request.protocol + request.host_with_port + bf.file.url rescue nil
        {
          "title" => bf.title_translations,
          "description" => bf.description_translations,
          "file" => file
        }
      end rescue nil

      ts = b.tags.collect do |t|
        {
          "name" => t.name_translations
        }
      end rescue nil

      text = {"en" => "", "zh_tw" => ""}
      text["en"] = (b.text_translations["en"].nil? ? "" :smart_convertor(b.text_translations["en"]))
      text["zh_tw"] = (b.text_translations["zh_tw"].nil? ? "" : smart_convertor(b.text_translations["zh_tw"]))

      author = User.find(b.create_user_id).member_profile.name rescue ""

      {
        "id" => b.id.to_s,
        "title" => b.title_translations,
        "subtitle" => b.subtitle_translations,
        "text" => text,
        "postdate" => b.postdate,
        "deadline" => b.deadline,
        "category" => b.category.title_translations,
        "tags" => ts,
        "image" => image,
        "links" => links,
        "files" => files,
        "author" => author,
        "url" => "/#{I18n.locale.to_s + page.url}/#{b.to_param}"
      }

    end

    # 計算總筆數 Start
    if !params[:keyword].blank?
      keyword = Regexp.new(".*"+params[:keyword]+".*")
      custom_bulletin_count = CustomBulletin.any_of({:title=>keyword},{:subtitle=>keyword},{:text=>keyword})
    else
      custom_bulletin_count = CustomBulletin.all
    end
    custom_bulletin_count = custom_bulletin_count.where(:is_preview.in=>[false,nil])
    custom_bulletin_count = custom_bulletin_count.where(:approved.ne => false , :rejected.ne => true)
    custom_bulletin_count = custom_bulletin_count.where(:postdate.lt=>Time.now)
    total_pages = custom_bulletin_count.count
    # End

    render :json => {
      "custom_bulletins" => custom_bulletins,
      "custom_bulletins_count" => custom_bulletins.count,
      "page_num" => page_num,
      "total_pages" => total_pages,
    }.to_json
  end

  def smart_convertor(text)
    html_string = text
    links = html_string.scan(/img.*?src="(.*?)"/i)
    links.each do |link|
      l = link.first
      new_link = nil
      if l.starts_with?("/")
        new_link = request.protocol + request.host_with_port + l
      elsif l.starts_with?("..")
        l1 = l.gsub("../","")
        new_link = request.protocol + request.host_with_port + "/" + l1
      end
      html_string = html_string.sub(l,new_link) if !new_link.nil?
    end
    return html_string
  end

  protected

  def set_I18n
    I18n.locale = params[:lang] if params[:lang].present?
  end

end
