# encoding=utf-8
# Redmine - project management software
# Copyright (C) 2006-2013  Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

class WelcomeController < ApplicationController
  # layout "base_welcome"
  include ApplicationHelper
  include WelcomeHelper
  helper :project_score
  caches_action :robots, :course, :contest,  expires_in: 2.hours, layout: false
  #before_filter :find_first_page, :only => [:index]
  # before_filter :fake, :only => [:index, :course]
  before_filter :entry_select, :only => [:index]
  skip_before_filter :check_authentication, :only => [:index]

  require 'simple_xlsx_reader'
 
  def index
    images = PortalImage.where(status: true).order("position asc")
    @images_url = []
    images.each do |image|
      @images_url << {path: image.link, image_url: "/images/avatars/PortalImage/#{image.id}"}
    end
    # 目录分级
    repertoires = Repertoire.includes(sub_repertoires: :tag_repertoires).order("updated_at asc")
    @rep_list = []
    repertoires.each do |rep|
      sub_rep_list = []
      rep.sub_repertoires.each do |sub_rep|
        tag_rep_list = []
        sub_rep.tag_repertoires.each do |tag_rep|
          tag_rep_list << {tag_id: tag_rep.id, tag_name: tag_rep.name}
        end
        sub_rep_list << {sub_rep_id: sub_rep.id, sub_rep_name: sub_rep.name, tag_rep_list: tag_rep_list}
      end
      @rep_list << {rep_id: rep.id, rep_name: rep.name, sub_rep_list: sub_rep_list}
    end
    @shixuns = Shixun.select([:id, :user_id, :homepage_show, :identifier, :status, :name, :challenges_count, :myshixuns_count, :use_scope,
                              :trainee, :averge_star]).where(homepage_show: 1).includes(:tag_repertoires).order("myshixuns_count desc").limit(8)
    @subjects = Subject.where(homepage_show: 1).includes(:shixuns).limit(8)
    @tea_users = User.where(homepage_teacher: 1).includes(:user_extensions).limit(10).order("experience desc")
    @stu_users = User.includes(:user_extensions).where(user_extensions: {identity: 1}).limit(10).order("experience desc")

    render :layout => 'educoder'
  end

  # 自动导入用户
  def import_users
    begin
      lists = read_xlsx_data("files/users.xlsx")
      lists.each_with_index do |list|
        logger.info("#{list[0]}---#{list[1]}")
        mail = list[1] + "@educoder.net"
        login = "edu" + list[1]
        if User.where(:login => login).blank?
          us = UsersService.new
          user = us.register phone: mail, password: 'wuhan12345678'
          @user = user
          @user.login = login
          @se = @user.extensions
          @user.lastname = list[0]
          @user.firstname = ""
          @user.show_realname = 0
          @user.nickname = list[0]

          @se.school_id = 117
          if @user.save && @se.save
            reward_grade(@user, @user.id, 'Account', 500)
            user.update_attributes!(authentication:1)
          end
          render :json => {:message => "sucess"}
        end
      end
    rescue Exception => e
      logger.error(e.message)
      render :json => {:status => 500}
    end
  end

  # 读取文件
  def read_xlsx_data(xlsx)
    doc = SimpleXlsxReader.open(xlsx)
    sheet = doc.sheets.first
    return sheet.rows
  end

  def add_user_by_name



  end

  def ccf
    render :layout => 'base_ccf'
  end

  def robots
    @projects = Project.all_public.active
    render :layout => false, :content_type => 'text/plain'
  end

  def course
    redirect_to signin_path
    return
    #
    # @course_page = FirstPage.find_by_page_type('course')
    # @school_id = params[:school_id] || User.current.user_extensions.school.try(:id) || 117
    # @logoLink ||= logolink()
  end

  def logolink()
    @course_page = FirstPage.find_by_page_type('course')
    logo = get_avatar?(@course_page)
    id = params[:school_id]
    logo_link = ""
    if id.nil? && (User.current.user_extensions.nil? || User.current.user_extensions.school.nil?)
      if logo
        logo_link = url_to_avatar(@course_page)
      else
        logo_link = '/images/transparent.png'
      end

    else
      if id == "0"
        if logo
          logo_link = url_to_avatar(@course_page)
        else
          logo_link = '/images/transparent.png'
        end
      else
        if id.nil?
          if School.find(User.current.user_extensions.school.id).logo_link.nil?
            logo_link = '/images/transparent.png'
          else
            logo_link = School.find(User.current.user_extensions.school.id).logo_link
          end
        else
          logo_link = School.find(id).logo_link

        end
      end
    end
    return logo_link
  end
  
  
  def contest
    redirect_to signin_path
    return

    # @contest_page = FirstPage.find_by_page_type('contest')
    # @contest_notifications = Contestnotification.order("created_at desc").limit(5)
  end

  def search
    @name = params[:q]
    @search_type = params[:search_type]
    page = (params[:page] || 1).to_i

    @users_count = User.search(@name).results.total
    @syllabus_count = Syllabus.search(@name).results.total
    @course_count = Course.search(@name).results.total
    @attach_count = Attachment.search(@name).results.total
    @project_count = Project.search(@name).results.total
    @memo_count = Memo.search(@name).results.total
    @total_count = Elasticsearch::Model.search({
                                                   query: {
                                                       multi_match: {
                                                           query: @name,
                                                           type:"most_fields",
                                                           operator: "or",
                                                           fields: ['login', 'firstname','lastname','title','name','description^0.5','filename','subject','content^0.5']
                                                       }
                                                   },
                                                   highlight: {
                                                       pre_tags: ['<span class="c_red">'],
                                                       post_tags: ['</span>'],
                                                       fields: {
                                                           login: {},
                                                           firstname: {},
                                                           lastname: {},
                                                           title:{},
                                                           name:{},
                                                           description:{},
                                                           filename:{},
                                                           subject:{},
                                                           content:{}
                                                       }
                                                   }
                                               },[User,Syllabus,Course,Attachment,Project,Memo] ).results.total


    case params[:search_type]
      when 'all'
        if (page-1)*20 >= @total_count
          page = 1
          params[:page] = "1"
        end
        @alls = Elasticsearch::Model.search({
                                                         query: {
                                                             multi_match: {
                                                                 query: @name,
                                                                 type:"most_fields",
                                                                 operator: "or",
                                                                 fields: ['login', 'firstname','lastname','title','name','description^0.5','filename','subject','content^0.5']
                                                             }
                                                         },
                                                         highlight: {
                                                             pre_tags: ['<span class="c_red">'],
                                                             post_tags: ['</span>'],
                                                             fields: {
                                                                 login: {},
                                                                 firstname: {},
                                                                 lastname: {},
                                                                 title:{},
                                                                 name:{},
                                                                 description:{},
                                                                 filename:{},
                                                                 subject:{},
                                                                 content:{}
                                                             }
                                                         }
                                                     },[User,Syllabus,Course,Attachment,Project,Memo] ).page(page).per(20).results
      when 'user'
            if (page-1)*20 >= @users_count
              page = 1
              params[:page] = "1"
            end
            @users = User.search(@name).page(page).per(20)
      when 'syllabus'
            if (page-1)*20 >= @syllabus_count
              page = 1
              params[:page] = "1"
            end
            @syllabuses = Syllabus.search(@name).page(page).per(20).results
      when 'project'
            if (page-1)*20 >= @project_count
              page = 1
            end
            @projects = Project.search(@name).page(page).per(20).results
      when 'course'
            if (page-1)*20 >= @course_count
              page = 1
              params[:page] = "1"
            end
            @courses = Course.search(@name).page(page).per(20).results
      when 'attachment'
            if (page-1)*20 >= @attach_count
              page = 1
              params[:page] = "1"
            end
            @attachments = Attachment.search(@name).page(page).per(20).results
      when 'memo'
            if (page-1)*20 >= @memo_count
              page = 1
              params[:page] = "1"
            end
            @memos = Memo.search(@name).page(page).per(20).results
      else
              if (page-1)*20 >= @total_count
                page = 1
                params[:page] = "1"
              end
              @alls = Elasticsearch::Model.search({
                                                                     query: {
                                                                         multi_match: {
                                                                             query: @name,
                                                                             type:"most_fields",
                                                                             operator: "or",
                                                                             fields: ['login', 'firstname','lastname','title','name','description^0.5','filename','subject','content^0.5']
                                                                         }
                                                                     },
                                                                     highlight: {
                                                                         pre_tags: ['<span class="c_red">'],
                                                                         post_tags: ['</span>'],
                                                                         fields: {
                                                                             login: {},
                                                                             firstname: {},
                                                                             lastname: {},
                                                                             title:{},
                                                                             name:{},
                                                                             description:{},
                                                                             filename:{},
                                                                             subject:{},
                                                                             content:{}
                                                                         }
                                                                     }
                                                                 },[User,Syllabus,Course,Attachment,Project,Memo] ).page(page).per(20).results

    end



    # search_type = params[:search_type].to_sym unless search_condition.blank?
    # search_by = params[:search_by]
    #
    # if search_type.nil? && params[:contests_search] && params[:name] != ""
    #   search_type  = :contests
    #   search_condition = params[:name]
    # end

    respond_to do |format|
      format.js
      format.html{ render :layout=>'users_base'}
    end
  end

  private
  # 判断网站的入口,是课程 course 则跳过index去渲染 course 方法
  def entry_select
    # url = request.original_url.gsub('/','')
    # if url.include?(Setting.url_course.gsub('/',''))
    #   if @first_page.show_course == 1
    #     course
    #     render :course
    #   else
    #     render_404
    #   end
    #
    #   return 0
    # elsif url.include?(Setting.url_contest.gsub('/',''))
    #   if @first_page.show_contest == 1
    #     contest
    #     render :contest
    #   else
    #     render_404
    #   end
    #
    #   return 0
    # elsif url.include?(Setting.url_user.gsub('/',''))
    #   #redirect_to(:controller => "users", :action => "index")
    # end
      
    
  end

  # def render(*args)
  #   _fake if @fake_filter
  #   super
  # end

  # private

  # def fake
  #   @fake_filter = true
  # end
  
  # # 骗子方法
  # def _fake
  #   instance_variables.map { |variable|
  #     if variable.to_s =~ /Count$/
  #       self.instance_variable_set(variable.to_sym,
  #          ("1" + (self.instance_variable_get(variable.to_sym).to_s)).to_i)
  #     end
  #   }
  # end

end