require "baked_file_system"
require "kemal"
require "../util"

class FS
  extend BakedFileSystem
  {% if flag?(:release) %}
    {% if read_file? "#{__DIR__}/../../dist/favicon.ico" %}
      {% puts "baking ../../dist" %}
      bake_folder "../../dist"
    {% else %}
      {% puts "baking ../../public" %}
      bake_folder "../../public"
    {% end %}
  {% end %}
end

class StaticHandler < Kemal::Handler
  @dirs = ["/css", "/js", "/img", "/favicon.ico"]

  def call(env)
    if request_path_startswith env, @dirs
      file = FS.get? env.request.path
      return call_next env if file.nil?

      slice = Bytes.new file.size
      file.read slice
      return send_file env, slice, file.mime_type
    end
    call_next env
  end
end
