DIR = File.dirname(__FILE__)

def fib(n)
  return 1 if n <= 1
  fib(n-1) + fib(n-2)
end

def wait(seconds)
  n = (seconds / 0.01).to_i
  n.times do
    sleep(0.01)
    #File.read(DIR + '/yahoo.html')
  end
end

class SimpleApp
  @@responses = {}

  def initialize
    @count = 0
  end

  def deferred?(env)
    false
  end

  def call(env)
    path = env['PATH_INFO'] || env['REQUEST_URI']
    commands = path.split('/')

    @count += 1
    if commands.include?('periodical_activity') and @count % 10 != 1
      return [200, {'Content-Type'=>'text/plain'}, "quick response!\r\n"]
    end

    if commands.include?('fibonacci')
      n = commands.last.to_i
      raise "fibonacci called with n <= 0" if n <= 0
      body = (1..n).to_a.map { |i| fib(i).to_s }.join(' ')
      status = 200

    elsif commands.include?('wait')
      n = commands.last.to_f
      raise "wait called with n <= 0" if n <= 0
      wait(n)
      body = "waited about #{n} seconds"
      status = 200

    elsif commands.include?('bytes')
      n = commands.last.to_i
      raise "bytes called with n <= 0" if n <= 0
      body = @@responses[n] || "C"*n
      status = 200

    elsif commands.include?('fixed')
      n = 20 * 1024;
      body = @@responses[n] || "C"*n
      status = 200

    elsif commands.include?('test_post_length')
      input_body = ""
      while chunk = env['rack.input'].read(512)
        input_body << chunk
      end
      if env['CONTENT_LENGTH'].to_i == input_body.length
        body = "Content-Length matches input length"
        status = 200
      else
        body = "Content-Length doesn't matches input length!
          content_length = #{env['CONTENT_LENGTH'].to_i}
          input_body.length = #{input_body.length}"
        status = 500
      end
    else
      status = 404
      body = "Undefined url"
    end

    body += "\r\n"
    headers = {'Content-Type' => 'text/plain', 'Content-Length' => body.length.to_s }
    [status, headers, [body]]
  end
end


if $0 == __FILE__
  #require DIR + '/../lib/ebb'
  require 'rubygems'
  require 'rack'
  require 'thin'
  require 'ebb'
#  Rack::Handler::Mongrel.run(SimpleApp.new, :Port => 8000)
  Thin::Server.start("0.0.0.0", 8000, SimpleApp.new)
#  Ebb::start_server(SimpleApp.new, :port => 8000)
end
