import { Link } from "@remix-run/react";
import {
humanTimeAgo,
snakeCaseToTitleCase,
worlds,
zones,
} from "~/utils/strings";
import * as styles from "./index-world.css";
import vsLogo from "~/images/vs-100.png";
import ncLogo from "~/images/nc-100.png";
import trLogo from "~/images/tr-100.png";
import { FactionBar } from "./faction-bar";
import type { MetagameWorld } from "~/utils/metagame";
import type { PopulationWorld } from "~/utils/population";
import { c } from "~/utils/classes";
import { useEffect, useState } from "react";
export type IndexWorldProps = {
metagame: MetagameWorld;
population: PopulationWorld;
};
export const IndexWorld = ({ metagame, population }: IndexWorldProps) => {
const worldId = metagame.id;
const { platform, location, name } = worlds[String(worldId || "default")];
const nextZone = metagame.zones.sort(
(a, b) =>
new Date(a.locked_since ?? Date.now()).getTime() -
new Date(b.locked_since ?? Date.now()).getTime()
)[0];
const nextZoneStrings = zones[nextZone.id];
return (
{name}
[{location}] [{platform}]{" "}
DETAILS ⇨
{population.factions.vs +
population.factions.nc +
population.factions.tr}

{" "}
{population.factions.vs}

{" "}
{population.factions.nc}

{" "}
{population.factions.tr}
{metagame.zones
.filter((zone) => !zone.locked)
.sort((a, b) => {
return a.alert && !b.alert ? -1 : b.alert && !a.alert ? 1 : 0;
})
.map((zone) => {
return worldId !== 19 ? (
) : (
);
})}
{worldId !== 19 && (
)}
);
};
const JaegerContinent = ({ zone }: { zone: MetagameWorld["zones"][0] }) => {
const {
name,
colors: [upper, lower],
} = zones[zone.id];
return (
);
};
const endTime = (alert: Required["alert"]) => {
const alertDurationMins = alert.alert_type !== "sudden_death" ? 90 : 15;
return new Date(alert.start_time).getTime() + alertDurationMins * 60 * 1000;
};
const Continent = ({ zone }: { zone: MetagameWorld["zones"][0] }) => {
const {
name,
colors: [upper, lower],
} = zones[zone.id];
return (
{zone.alert && (
<>
{snakeCaseToTitleCase(zone.alert.alert_type).toUpperCase()}{" "}
ALERT PROGRESS
{" "}
{" "}
>
)}
);
};
const timeLeftString = (alert: MetagameWorld["zones"][0]["alert"]) => {
if (alert) {
const time = endTime(alert) - Date.now();
if (time < 2000) {
return <>JUST ENDED>;
}
const speed = time < 1000 * 60 * 15 ? "1s" : "4s";
return (
<>
{humanTimeAgo(time, true).toUpperCase()} LEFT{" "}
>
);
} else {
return <>>;
}
};
const TimeLeft = ({ alert }: { alert: MetagameWorld["zones"][0]["alert"] }) => {
const [timeLeft, setTimeLeft] = useState(timeLeftString(alert));
useEffect(() => {
if (alert) {
const interval = setInterval(() => {
setTimeLeft(timeLeftString(alert));
}, 1000);
return () => clearInterval(interval);
}
}, [alert]);
return <>{timeLeft}>;
};