#!/usr/bin/env ruby
# frozen_string_literal: true

require 'ruby_with_elk'
require 'logstash-logger'
require 'puma'
require 'rack'
require 'rack/handler/puma'

log = LogStashLogger.new(
  type: ENV.fetch('LOGSTASH_TYPE', 'stdout').downcase.to_sym,
  host: ENV.fetch('LOGSTASH_HOST'),
  port: 5228,
  formatter: :json_lines,
  sync: true
)

handler = lambda do |env|
  case env['REQUEST_PATH']
  when %r{^/$}
    log.info message: 'New client', conversion: 1
    return [200, {}, [
      "<a href='/login'>login</a>\n",
      "<a href='/buy?apple'>buy apple</a>\n",
      "<a href='/buy?banana'>buy banana</a>\n"
    ]]
  when %r{^/login}
    log.info message: 'Logged', conversion: 2
    return [200, {}, [
      "<a href='/buy?apple'>buy apple</a>\n",
      "<a href='/buy?banana'>buy banana</a>\n"
    ]]
  when %r{^/buy}
    product = env['REQUEST_PATH'].match(/apple|banana/).to_s
    log.info message: product, conversion: 3
    return [200, {}, ['OK']]
  end
  log.warn message: 'not found page', page: env['REQUEST_PATH']
  [404, {}, ['not found']]
end

Rack::Handler::Puma.run handler, Verbose: true
