---
import { type CollectionEntry, getEntry, getEntries } from "astro:content";
import PublishedContentLayout from "./PublishedContentLayout.astro";
import { t } from "@i18n";
import Authors from "@components/Authors.astro";
import Prose from "@components/Prose.astro";
import UserComponent from "@components/UserComponent.astro";

type Props = CollectionEntry<"games">["data"];

const { props } = Astro;
const prev = props.prev && (await getEntry(props.prev));
const next = props.next && (await getEntry(props.next));
const series = props.series && (await getEntry(props.series));
const authorsList = await getEntries(props.authors);
const relatedStories = (await getEntries(props.relatedStories)).filter((story) => !story.data.isDraft);
const relatedGames = (await getEntries(props.relatedGames)).filter((game) => !game.data.isDraft);
const relatedBlogPosts = (await getEntries(props.relatedBlogPosts)).filter((post) => !post.data.isDraft);
const metaDescription = t(props.lang, "game/warnings", props.platforms, props.contentWarning);
---

<PublishedContentLayout
  publishedContentType="game"
  title={props.title}
  lang={props.lang}
  isDraft={props.isDraft}
  isAgeRestricted={props.isAgeRestricted}
  pubDate={props.pubDate}
  description={props.description}
  summary={undefined}
  tags={props.tags}
  thumbnail={props.thumbnail}
  thumbnailWidth={props.thumbnailWidth}
  thumbnailHeight={props.thumbnailHeight}
  copyrightedCharacters={props.copyrightedCharacters}
  series={series}
  prev={prev && !prev.data.isDraft
    ? { link: `/games/${prev.id}`, title: t(props.lang, "game/previous_game", prev.data.title) }
    : undefined}
  next={next && !next.data.isDraft
    ? { link: `/games/${next.id}`, title: t(props.lang, "game/next_game", next.data.title) }
    : undefined}
  relatedStories={relatedStories}
  relatedGames={relatedGames}
  relatedBlogPosts={relatedBlogPosts}
  posts={props.posts}
  authors={authorsList}
  labelReturnTo={{ title: t(props.lang, "game/return_to_games"), link: "/games" }}
  labelPreviousContent={t(props.lang, "game/previous_game_aria_label")}
  labelNextContent={t(props.lang, "game/next_game_aria_label")}
  labelTitleSection={t(props.lang, "game/title_aria_label")}
  labelInformationSection={t(props.lang, "game/information_aria_label")}
  labelArticleSection={t(props.lang, "game/article_aria_label")}
>
  <Fragment slot="head">
    <meta property="og:description" content={metaDescription} />
    <meta name="description" content={metaDescription} />
  </Fragment>
  <Fragment slot="section-information">
    <Authors lang={props.lang}>
      {
        authorsList.map((author) => (
          <UserComponent rel="author nofollow" class="p-author" user={author} lang={props.lang} />
        ))
      }
    </Authors>
    <div id="platforms">
      <p>{t(props.lang, "game/platforms", props.platforms)}</p>
    </div>
  </Fragment>
  <div slot="section-content-warning" id="content-warning">
    <p>{props.contentWarning}</p>
  </div>
  <Fragment slot="section-article">
    <Prose>
      <slot />
    </Prose>
  </Fragment>
</PublishedContentLayout>
