package lib

import (
	"fmt"
	"strings"
	"time"

	"github.com/gofiber/fiber/v2"
	"github.com/russross/blackfriday/v2"
)

// python3 -c "import string; print(string.ascii_letters+string.digits+\" /,_-?!'\\\"\")"
var valid string = `abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 /,_-?!'"`

func IsStringValid(s string) bool {
	for _, c := range s {
		if !strings.Contains(valid, string(c)) {
			fmt.Printf("%c\n", c)
			return false
		}
	}
	return true
}

func RenderError(c *fiber.Ctx, code int) error {
	var msg string = "Server Error"
	c.Status(code)

	switch code {
	case 404:
		msg = "Not Found"
	}

	return c.Render("error", fiber.Map{
		"msg": msg,
	})
}

func TimeFromString(date string) (time.Time, error) {
	res, err := time.Parse("02/01/06", date)
	if err == nil {
		return res, nil
	}
	return time.Now(), nil
}

func ParseMarkdown(md string) string {
	ext := blackfriday.FencedCode
	ext |= blackfriday.BackslashLineBreak
	ext |= blackfriday.Strikethrough
	ext |= blackfriday.Tables
	ext |= blackfriday.NoEmptyLineBeforeBlock

	return string(blackfriday.Run([]byte(md), blackfriday.WithExtensions(ext)))
}