package view

import (
	"embed"
	"errors"
	"mime"
	"net/http"
	"os"
	"path"
	"path/filepath"
)

func ServeEmbedFS(fs embed.FS, dir string) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        file, err := fs.ReadFile(filepath.Join(dir, filepath.Clean(r.URL.Path)))
        if err != nil {
            http.NotFound(w, r)
            return
        }

        w.Header().Set("Content-Type", mime.TypeByExtension(path.Ext(r.URL.Path)))
        w.WriteHeader(http.StatusOK)

        w.Write(file)
    })
}

func ServeFiles(directory string) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        info, err := os.Stat(filepath.Join(directory, filepath.Clean(r.URL.Path)))

        // does the file exist?
        if err != nil {
            if errors.Is(err, os.ErrNotExist) {
                http.NotFound(w, r)
                return
            }
        }

        // is thjs a directory? (forbidden)
        if info.IsDir() {
            http.NotFound(w, r)
            return
        }

        http.FileServer(http.Dir(directory)).ServeHTTP(w, r)
    })
}
