package calls

import (
	"fmt"
	"log"
	"net/http"
	"os"
	"strconv"

	b "streifling.com/jason/cpolis/cmd/backend"
)

func ServeArticle(c *b.Config, db *b.DB) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		if !tokenIsVerified(w, r, c) {
			return
		}

		idString := r.PathValue("id")
		id, err := strconv.ParseInt(idString, 10, 64)
		if err != nil {
			log.Println(err)
			http.Error(w, err.Error(), http.StatusInternalServerError)
			return
		}

		article, err := db.GetArticle(id)
		if err != nil {
			log.Println(err)
			http.Error(w, err.Error(), http.StatusInternalServerError)
			return
		}

		if !article.Published {
			return
		}

		articleAbsName := fmt.Sprint(c.ArticleDir, "/", article.ID, ".md")
		contentBytes, err := os.ReadFile(articleAbsName)
		if err != nil {
			log.Println(err)
			http.Error(w, err.Error(), http.StatusInternalServerError)
			return
		}

		content, err := b.ConvertToHTML(string(contentBytes))
		if err != nil {
			log.Println(err)
			http.Error(w, err.Error(), http.StatusInternalServerError)
			return
		}

		fmt.Fprint(w, content)
	}
}