class PluginController < ApplicationController
  def esi
    buffer = []
    out = []
    buffer << Time.now.utc.to_i
    buffer << "1.2"
    buffer << params[:ch] ? params[:ch] : ""
    out << "#ESI#"
    out << Verification.verify(buffer.join)
    out << buffer.join("\r")
    render_out out
  end

  def user
    buffer = []
    out = []

    if ban = Ban.first(:conditions => ["expiry > UTC_TIMESTAMP() AND steamid = ? AND ban_type = ?", params[:id], Ban::TYPE_SERVER])
      out << "#USER#"
      out << "BANNED"
      out << ban.expiry.utc.to_i
      out << ban.reason
      out << "\r\r\r\r\r\r\r"
    elsif user = User.first(:conditions => {:steamid => params[:id]})
      teamer = (user.team ? user.teamers.active.of_team(user.team).first : nil)
      icon = 0
      rank = "User"
      if Group.find(Group::DONORS).users.exists?(user)
        rank = "Donor"
        icon = icon | 1
      end
      if Group.find(Group::CHAMPIONS).users.exists?(user)
        icon = icon | 2
      end
      if user.ref?
        rank = "Referee"
        icon = icon | 4
      end
      if user.admin?
        rank = "Admin"
        icon = icon | 8
      end

      buffer << user.steamid
      buffer << user.username
      buffer << user.lastip
      buffer << (user.team ? Verification.uncrap(user.team.to_s) : "No Team")
      buffer << user.id
      buffer << user.team_id
      buffer << rank
      buffer << (teamer ? teamer.ranks[teamer.rank] : "")
      buffer << icon
      buffer << params[:ch] ? params[:ch] : ""
      buffer << (user.can_play? ? "1" : "0")

      out << "#USER#"
      out << Verification.verify(buffer.join)
      out << buffer.join("\r")
    else
      out << "#FAIL#"
    end

    render_out out
  end

  #def admin
  #	areq = AdminRequest.new
  #	areq.addr = params[:addr]
  #	areq.pwd = params[:pwd]
  #	areq.msg = params[:msg]
  #	areq.player = params[:player]
  #	areq.user_id = params[:user]
  #	areq.save!
  #	render :text => "Ok"
  #end

  def ban
    ban = Ban.new
    ban.steamid = params[:id]
    ban.ts = params[:ts]
    ban.sign = params[:sign]
    ban.expiry = DateTime.now.ago(-(params[:len].to_i*60))
    ban.addr = params[:addr]
    ban.reason = params[:reason]
    ban.ban_type = Ban::TYPE_SERVER
    ban.save!

    render :text => "Ok"
  end

  def hltv_req
    if params[:game].to_i > 0
      if match = Match.first(:conditions => {:id => params[:game]})
        match.hltv_record params[:addr], params[:pwd]
        hltv = match.hltv
      else
        render :text => t(:matches_notfound)
      end
    else
      hltv = Server.hltvs.active.unreserved_now.unreserved_hltv_around(DateTime.now).first unless hltv
      render :text => t(:hltv_notavailable) unless hltv

      hltv.recording = params[:game]
      hltv.reservation = params[:addr]
      hltv.pwd = params[:pwd]
      hltv.save!
    end

    render :text => t(:hltv_sent)
  end

  def hltv_move
    Server.move params[:addr], params[:newaddr], params[:newpwd]
    render :text => t(:hltv_movedd) + params[:newaddr]
  end

  def hltv_stop
    Server.stop params[:addr]
    render :text => t(:hltv_stopped)
  end

  private

  def render_out out
    @text = out.join("\r")
    render :layout => false
  end
end