package templates

import (
	"context"
	"io"
	"time"

	"go.alanpearce.eu/website/internal/config"
	"go.alanpearce.eu/website/internal/content"
)

func Unsafe(html string) templ.Component {
	return templ.ComponentFunc(func(ctx context.Context, w io.Writer) (err error) {
		_, err = io.WriteString(w, html)
		return
	})
}

templ postDate(d time.Time) {
	<time class="dt-published" datetime={ d.UTC().Format(time.RFC3339) }>
		{ d.Format("2006-01-02") }
	</time>
}

templ PostPage(config *config.Config, post content.Post) {
	@Page(config, PageSettings{
		Title: post.Title,
		TitleAttrs: templ.Attributes{
			"class": "p-author h-card",
			"rel":   "author",
		},
		BodyAttrs: templ.Attributes{
			"class": "h-entry",
		},
		Path: post.URL,
	}) {
		<article>
			<h1 class="p-name">{ post.Title }</h1>
			<p>
				<a class="u-url" href={ templ.SafeURL(post.URL) }>
					@postDate(post.Date)
				</a>
			</p>
			<div class="e-content">
				@Unsafe(post.Content)
			</div>
			<div class="tags">
				Tags:
				<ul class="p-categories tags">
					for _, tag := range post.Taxonomies.Tags {
						<li>
							@tagLink(tag, templ.Attributes{"class": "p-category"})
						</li>
					}
				</ul>
			</div>
		</article>
	}
}