package main

import (
	"io/fs"
	"net/http"
	"strings"
)

// Since the gin-static middleware uses a version of http.Filesystem with an extra Exists() func, we extend it here.

type httpFS struct {
	hfs http.FileSystem // Created by converting fs.FS using http.FS()
	fs  fs.FS
}

func (f httpFS) Open(name string) (http.File, error) {
	return f.hfs.Open("web" + name)
}

func (f httpFS) Exists(prefix string, filepath string) bool {
	if p := strings.TrimPrefix(filepath, prefix); len(p) < len(filepath) {
		stats, err := fs.Stat(f.fs, "web/"+p)
		if err != nil {
			return false
		}
		if stats.IsDir() {
			return false
		}
		return true
	}
	return false
}