// Copyright 2013 The Go 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 website exports the static content as an embed.FS.
package website

import (
	"os"

	"golang.org/x/website/internal/backport/io/fs"
	"golang.org/x/website/internal/backport/osfs"
)

// Content is the website's static content.
var Content = findContent()

// TODO: Use with Go 1.16 in place of findContent call above.
// var Content = subdir(embedded, "_content")
// //go:embed _content
// var embedded embed.FS

func findContent() fs.FS {
	// Walk parent directories looking for _content.
	dir := "_content"
	for i := 0; i < 10; i++ {
		if _, err := os.Stat(dir + "/lib/godoc/godocs.js"); err == nil {
			return osfs.DirFS(dir)
		}
		dir = "../" + dir
	}
	panic("cannot find _content")
}

func subdir(fsys fs.FS, path string) fs.FS {
	s, err := fs.Sub(fsys, path)
	if err != nil {
		panic(err)
	}
	return s
}
