# 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.



include AvatarHelper
module UsersHelper
  def users_status_options_for_select(selected)
    user_count_by_status = User.count(:group => 'status').to_hash
    options_for_select([[l(:label_all), ''],
                        ["#{l(:status_active)} (#{user_count_by_status[1].to_i})", '1'],
                        ["#{l(:status_registered)} (#{user_count_by_status[2].to_i})", '2'],
                        ["#{l(:status_locked)} (#{user_count_by_status[3].to_i})", '3']], selected.to_s)
  end

  def user_mail_notification_options(user)
    user.valid_notification_options.collect {|o| [l(o.last), o.first]}
  end

  def change_status_link(user)
    url = {:controller => 'users', :action => 'update', :id => user, :page => params[:page], :status => params[:status], :tab => nil}

    if user.locked?
      link_to l(:button_unlock), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :put, :class => 'icon icon-unlock'
    elsif user.registered?
      link_to l(:button_activate), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :put, :class => 'icon icon-unlock'
    elsif user != User.current
      link_to l(:button_lock), url.merge(:user => {:status => User::STATUS_LOCKED}), :method => :put, :class => 'icon icon-lock'
    end
  end

  def user_settings_tabs
    tabs = [{:name => 'general', :partial => 'users/general', :label => :label_general},
            {:name => 'memberships', :partial => 'users/memberships', :label => :label_project_plural}
            ]
    if Group.all.any?
      tabs.insert 1, {:name => 'groups', :partial => 'users/groups', :label => :label_group_plural}
    end
    tabs
  end

  # this method is used to get all projects that tagged one tag
  # added by william
  def get_users_by_tag(tag_name)
    User.tagged_with(tag_name).order('updated_on desc')
  end
  
  # added by fq
  # <div class="pagination" >
  # <ul>
  # <li><%= link_to("所有动态", {:controller => 'users', :action => 'show'}) %></li>
  # <li><%= link_to("只看自己", {:controller => 'users', :action => 'show', :type => 1}) %></li>
  # <li><%= link_to("所有反馈", {:controller => 'users', :action => 'show', :type => 2}) %></li>
  # </ul></div> 
  
  def show_activity(state)
    content = ''.html_safe
    case state
    when 0
      s = content_tag('span', l(:label_user_all_activity), :class => "current-page")
      content << content_tag('li', s)
      content << content_tag('li', link_to(l(:label_user_activity_myself), {:controller => 'users', :action => 'show', :type => 1}))
      content << content_tag('li', link_to(l(:label_user_all_respond), {:controller => 'users', :action => 'show', :type => 2}))
    when 1
      s = content_tag('span', l(:label_user_activity_myself), :class => "current-page")
      content << content_tag('li', link_to(l(:label_user_all_activity), {:controller => 'users', :action => 'show'}))
      content << content_tag('li', s, :class => "current-page")
      content << content_tag('li', link_to(l(:label_user_all_respond), {:controller => 'users', :action => 'show', :type => 2}))
    when 2
      s = content_tag('span', l(:label_user_all_respond), :class => "current-page")
      content << content_tag('li', link_to(l(:label_user_all_activity), {:controller => 'users', :action => 'show'}))
      content << content_tag('li', link_to(l(:label_user_activity_myself), {:controller => 'users', :action => 'show', :type => 1}))
      content << content_tag('li', s, :class => "current-page")
    end
    content_tag('div', content, :class => "pagination")
  end
  
  def watch_projects(state)
    content = ''.html_safe
    case state
    when 0
      s = content_tag('span', l(:label_project_take), :class => "current-page")
      content << content_tag('li', s)
      content << content_tag('li', link_to(l(:label_has_watched_project), {:controller => 'users', :action => 'watch_projects', :type => 1}))
    when 1
      s = content_tag('span', l(:label_has_watched_project), :class => "current-page")
      content << content_tag('li', link_to(l(:label_project_take), {:controller => 'users', :action => 'user_projects'}))
      content << content_tag('li', s, :class => "current-page")
    end
    content_tag('div', content, :class => "pagination")
  end

  def user_course(state)
    content = ''.html_safe
    if @user != User.current
      if  @user.user_extensions.identity == 0 
        case state
        when 0
          s = content_tag('span', '他执教的课程', :class => "current-page")
          content << content_tag('li', s)
          content << content_tag('li', link_to('他发布的作业', {:controller => 'users', :action => 'user_courses', :type => 1}))
          content_tag('div', content, :class => "pagination")
        when 1
          s = content_tag('span', '他发布的作业', :class => "current-page")
          content << content_tag('li', link_to('他执教的课程', {:controller => 'users', :action => 'user_courses'}))
          content << content_tag('li', s, :class => "current-page")    
          content_tag('div', content, :class => "pagination")
        end
      else    
        case state
        when 0
          s = content_tag('span', '他的课程', :class => "current-page")
          content << content_tag('li', s)
          content << content_tag('li', link_to('他的作业', {:controller => 'users', :action => 'user_courses', :type => 1}))
          content_tag('div', content, :class => "pagination")      
        when 1
          s = content_tag('span', '他的作业', :class => "current-page")
          content << content_tag('li', link_to('他的课程', {:controller => 'users', :action => 'user_courses', :type => 0}))
          content << content_tag('li', s, :class => "current-page")      
          content_tag('div', content, :class => "pagination")
        end
      end
    else
      if  @user.user_extensions.identity == 0 
        case state
        when 0
          s = content_tag('span', l(:label_teaching_course), :class => "current-page")
          content << content_tag('li', s)
          content << content_tag('li', link_to(l(:label_release_homework), {:controller => 'users', :action => 'user_courses', :type => 1}))
          content_tag('div', content, :class => "pagination")
        when 1
          s = content_tag('span', l(:label_release_homework), :class => "current-page")
          content << content_tag('li', link_to(l(:label_teaching_course), {:controller => 'users', :action => 'user_courses'}))
          content << content_tag('li', s, :class => "current-page")    
          content_tag('div', content, :class => "pagination")
        end
      else    
        case state
        when 0
          s = content_tag('span', l(:label_my_course), :class => "current-page")
          content << content_tag('li', s)
          content << content_tag('li', link_to('我的作业', {:controller => 'users', :action => 'user_courses', :type => 1}))
          content_tag('div', content, :class => "pagination")      
        when 1
          s = content_tag('span', '我的作业', :class => "current-page")
          content << content_tag('li', link_to(l(:label_my_course), {:controller => 'users', :action => 'user_courses', :type => 0}))
          content << content_tag('li', s, :class => "current-page")      
          content_tag('div', content, :class => "pagination")
        end
      end
    end
  end

  # added by huang 
  def sort_user(state, project_type)
    content = ''.html_safe
    case state
    when 0
      content << content_tag('li', link_to(l(:label_sort_by_active), users_path(params.merge({:user_sort_type => '1', :project_type => project_type}) )))
      content << content_tag('li', link_to(l(:label_sort_by_influence), users_path(params.merge({:user_sort_type => '2', :project_type => project_type}) )))
      content << content_tag('li', link_to(l(:label_sort_by_time), users_path(params.merge({:user_sort_type => '0', :project_type => project_type}) ), :class=>"selected") )
    when 1
      content << content_tag('li', link_to(l(:label_sort_by_active), users_path(params.merge({:user_sort_type => '1', :project_type => project_type}) ), :class=>"selected") )
      content << content_tag('li', link_to(l(:label_sort_by_influence), users_path(params.merge({:user_sort_type => '2', :project_type => project_type}) )))
      content << content_tag('li', link_to(l(:label_sort_by_time), users_path(params.merge({:user_sort_type => '0', :project_type => project_type}) )))
    when 2
      content << content_tag('li', link_to(l(:label_sort_by_active), users_path(params.merge({:user_sort_type => '1', :project_type => project_type}) )))
      content << content_tag('li', link_to(l(:label_sort_by_influence), users_path(params.merge({:user_sort_type => '2', :project_type => project_type}) ), :class=>"selected") )
      content << content_tag('li', link_to(l(:label_sort_by_time), users_path(params.merge({:user_sort_type => '0', :project_type => project_type}) )))
    end
    content = content_tag('ul', content)
    content_tag('div', content, :class => "tabs")
  end  
  
  def sort_user_enterprise(state, project_type)
    content = ''.html_safe
    case state
    when 0
      content << content_tag('li', link_to(l(:label_sort_by_active), users_path(:user_sort_type => '1', :project_type => project_type)))
      content << content_tag('li', link_to(l(:label_sort_by_influence), users_path(:user_sort_type => '2', :project_type => project_type)))
      content << content_tag('li', link_to(l(:label_sort_by_time), users_path(:user_sort_type => '0', :project_type => project_type), :class=>"selected"), :class=>"selected")
    when 1
      content << content_tag('li', link_to(l(:label_sort_by_active), users_path(:user_sort_type => '1', :project_type => project_type), :class=>"selected"), :class=>"selected")
      content << content_tag('li', link_to(l(:label_sort_by_influence), users_path(:user_sort_type => '2', :project_type => project_type)))
      content << content_tag('li', link_to(l(:label_sort_by_time), users_path(:user_sort_type => '0', :project_type => project_type)))
    when 2
      content << content_tag('li', link_to(l(:label_sort_by_active), users_path(:user_sort_type => '1', :project_type => project_type)))
      content << content_tag('li', link_to(l(:label_sort_by_influence), users_path(:user_sort_type => '2', :project_type => project_type), :class=>"selected"), :class=>"selected")
      content << content_tag('li', link_to(l(:label_sort_by_time), users_path(:user_sort_type => '0', :project_type => project_type)))
    end
    content = content_tag('ul', content)
    content_tag('div', content, :class => "tabs_enterprise")
  end 

  def gender_avatar_uri user
    img_uri = '/images/sidebar/female.png'
    return img_uri if user.user_extensions.blank?
    person_gender = user.user_extensions.gender
    img_uri = (person_gender == 1) ? '/images/sidebar/female.png' : '/images/sidebar/male.png'
  end

  include CoursesHelper
  def is_watching?(user)
    login_user = User.current# 登录者

    courses = user.projects.where('project_type=1')
    return true if ((login_user == user) or login_user.admin?)
    courses.each do |course|
      return true if login_user.member_of?(course)
    end
    ## 下面的代码只判断是否是老师或者助教，上面是成员都可以看到
    # people_ids = []
    # user.projects.where('project_type=1').each do |project|
    #   tmp = searchTeacherAndAssistant(project)
    #   people_ids += (members_to_user_ids(tmp)) unless tmp.nil?
    # end
    # people_ids.include?(login_user.id) or (login_user == user) or login_user.admin?
    
    false
  end

  # base user上面的navbar显示内容
  def show_item_on_navbar params
    displayed_item = %w|index|
    displayed_item.include?(params['action'])
  end
  # base user上面searchBar显示
  def show_search_bar params
    displayed_flag = %w|index|
    !displayed_flag.include?(params['action'])
  end
end
