// Copyright (c) 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package main

import (
    "flag"
    "net/http"
    "path"
    "strings"
)

type skyHandlerRoot struct {
    root string
}

func skyHandler(root string) http.Handler {
    return &skyHandlerRoot{root}
}

func (handler *skyHandlerRoot) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    path := path.Join(handler.root, r.URL.Path)
    if strings.HasSuffix(path, ".sky") {
        w.Header().Set("Content-Type", "text/sky")
    }
    http.ServeFile(w, r, path)
}

func main() {
    var configuration = flag.String("t", "Release", "The target configuration (i.e. Release or Debug)")
    flag.Parse()

    args := flag.Args()
    root := args[0]
    port := args[1]

    genRoot := path.Join(root, "out", *configuration, "gen")

    http.Handle("/", skyHandler(root))
    http.Handle("/mojo/public/", http.StripPrefix("/mojo/public/", skyHandler(path.Join(genRoot, "mojo", "public"))))
    http.Handle("/mojo/services/", http.StripPrefix("/mojo/services/", skyHandler(path.Join(genRoot, "mojo", "services"))))
    http.Handle("/sky/services/", http.StripPrefix("/sky/services/", skyHandler(path.Join(genRoot, "sky", "services"))))

    http.ListenAndServe(":" + port, nil)
}
