---
import {CollectionEntry} from "astro:content";
import {astroI18n, createGetStaticPaths, t} from "astro-i18n";
import {getCollection} from "astro:content";
import PageLayout from "../../../layouts/PageLayout.astro";
import {capitalize} from "../../../components/admin/util";
import PostComponent from "../../../components/PostComponent.astro";
import dayjs from "dayjs";

export const getStaticPaths = createGetStaticPaths(async () => {
    let posts = (await getCollection("announcements", entry => entry.id.split("/")[0] === astroI18n.locale));

    const germanPosts = await getCollection("announcements", entry => entry.id.split("/")[0] === "de");

    posts.sort((a, b) => dayjs(b.data.created).unix() - dayjs(a.data.created).unix());

    germanPosts.forEach(value => {
        if (posts.find(post => post.data.key === value.data.key)) {
            return;
        } else {
            posts.push(value);
        }
    });

    posts = posts.filter((value, index) => index < 20);

    let groupedByTags: Record<string, CollectionEntry<"announcements">[]> = {};
    posts.forEach(post => {
        post.data.tags.forEach(tag => {
            if (!groupedByTags[tag]) {
                groupedByTags[tag] = [];
            }
            groupedByTags[tag].push(post);
        });
    });

    return Object.keys(groupedByTags).map(tag => ({
        params: {
            tag: tag,
        },
        props: {
            posts: groupedByTags[tag],
            tag: tag,
        },
    }));
});

interface Props {
    posts: CollectionEntry<"announcements">[];
    tag: string;
}

const {posts, tag} = Astro.props;
---

<PageLayout title={t("tag.title", {tag: capitalize(tag)})}>
    {posts.map((post, index) => (
        <div>
            <PostComponent post={post}/>
            {index !== posts.length - 1 &&
                        <hr/>}
        </div>
    ))}
</PageLayout>