package web

import (
	"embed"
	"io/fs"
	"net/http"

	"git.arav.su/Arav/dwelling-home/pkg/article"
	"github.com/gomarkdown/markdown"
)

// To install a Jade compiler: go install github.com/Joker/jade/cmd/jade@latest
//
//go:generate $GOPATH/bin/jade -basedir ./templates -pkg=web -stdbuf -stdlib -writer index.pug stuff.pug mindflow.pug
//go:generate $GOPATH/bin/jade -basedir ./templates -pkg=web -stdbuf -stdlib -writer about.pug guestbook.pug rss.pug
//go:generate $GOPATH/bin/jade -basedir ./templates -pkg=web -stdbuf -stdlib -writer guestbook_admin.pug mindflow_admin.pug

//go:generate $GOPATH/bin/jade -basedir ./templates -pkg=web -stdbuf -stdlib -writer article.pug

//go:generate $GOPATH/bin/jade -basedir ./templates -pkg=web -stdbuf -stdlib -writer error403.pug error404.pug error500.pug

//go:embed assets
var assetsDir embed.FS

func Assets() http.FileSystem {
	f, _ := fs.Sub(assetsDir, "assets")
	return http.FS(f)
}

func AssetsGetFile(path string) ([]byte, error) {
	return assetsDir.ReadFile("assets/" + path)
}

//go:embed articles
var articlesFS embed.FS
var articles map[string]article.Article = make(map[string]article.Article)

func GetArticle(name string) (*article.Article, error) {
	if artcl, ok := articles[name]; ok {
		return &artcl, nil
	} else {
		meta, err := articlesFS.ReadFile("articles/" + name + ".meta")
		if err != nil {
			return nil, err
		}

		md, err := articlesFS.ReadFile("articles/" + name + ".md")
		if err != nil {
			return nil, err
		}

		artcl := article.Article{
			Body: markdown.ToHTML(md, nil, nil)}

		artcl.ParseMetadata(meta)

		articles[name] = artcl

		return &artcl, nil
	}
}
