/*
 * MHSF, Minehut Server List
 * All external content is rather licensed under the ECA Agreement
 * located here: https://list.mlnehut.com/docs/legal/external-content-agreement
 *
 * All code under MHSF is licensed under the MIT License
 * by open source contributors
 *
 * Copyright (c) 2024 dvelo
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */

import ServerView from "@/components/ServerView";
import type { Metadata, ResolvingMetadata } from "next";
import TabServer from "@/components/misc/TabServer";
import ColorProvider from "@/components/ColorProvider";
import AfterServerView from "@/components/AfterServerView";
import Banner from "@/components/Banner";
import { Button } from "@/components/ui/button";
import { CornerDownLeft } from "lucide-react";
import Link from "next/link";

type Props = {
  params: { server: string };
};

export async function generateMetadata(
  { params }: Props,
  parent: ResolvingMetadata
): Promise<Metadata> {
  // read route params
  const { server } = params;
  const json = await (
    await fetch("https://api.minehut.com/server/" + server + "?byName=true")
  ).json();

  return {
    themeColor: "#000000",
    title:
      json.server == null
        ? "Server doesn't exist | MHSF"
        : json.server.name +
          ", " +
          (json.server.online
            ? json.server.playerCount +
              (json.server.maxPlayers != 10
                ? "/" + json.server.maxPlayers
                : "") +
              " online"
            : "Offline") +
          " | MHSF",
    description:
      json.server == null
        ? `The server ${server} doesn't exist.`
        : `View ${server} on Minehut Server Finder!`,
    authors: json.server == null ? undefined : { name: json.server.owner },
    applicationName: "MHSF (Minehut Server Finder)",
    icons:
      json.server == null
        ? undefined
        : "https://minehut-server-icons-live.s3.us-west-2.amazonaws.com/" +
          (json.server.icon == undefined ? "OAK_SIGN" : json.server.icon) +
          ".png",
    twitter: {
      title:
        json.server == null
          ? "Server doesn't exist | MHSF"
          : json.server.name +
            ", " +
            (json.server.online
              ? json.server.playerCount +
                (json.server.maxPlayers != 10
                  ? "/" + json.server.maxPlayers
                  : "") +
                " online"
              : "Offline") +
            " | MHSF",
      description:
        json.server == null
          ? `The server ${server} doesn't exist.`
          : `View ${server} on Minehut Server Finder!`,
      images: [
        {
          url:
            "https://minehut-server-icons-live.s3.us-west-2.amazonaws.com/" +
            json.server.icon +
            ".png",
        },
        {
          url: "/public/imgs/icon-cf.png",
        },
      ],
    },
    openGraph: {
      type: "profile",
      siteName: "MHSF (Minehut Server Finder)",

      images: [
        {
          url:
            "https://minehut-server-icons-live.s3.us-west-2.amazonaws.com/" +
            json.server.icon +
            ".png",
        },
        {
          url: "/public/imgs/icon-cf.png",
        },
      ],
    },
  };
}

export default function ServerPage({ params }: { params: { server: string } }) {
  return (
    <main>
      <ColorProvider server={params.server}>
        <div className={"pt-16"}>
          <Banner server={params.server} />
          <Link href="/">
            <Button variant="link" className="text-muted-foreground text-sm">
              <CornerDownLeft size={16} className="mr-2" /> Go back to the
              server list
            </Button>
          </Link>
          <TabServer server={params.server} tabDef="general" />
          <div className="pt-8">
            <ServerView server={params.server} />
          </div>
          <AfterServerView server={params.server} />
        </div>
      </ColorProvider>
    </main>
  );
}
