import { fisherYates, tankIcon } from "@blitzkit/core";
import { literals } from "@blitzkit/i18n";
import { ChevronRightIcon } from "@radix-ui/react-icons";
import {
AlertDialog,
Box,
Button,
Flex,
Grid,
Skeleton,
Text,
} from "@radix-ui/themes";
import { useMemo, useState } from "react";
import usePromise from "react-promise-suspense";
import { api } from "../api/dynamic";
import { filterTanks } from "../core/blitzkit/filterTanks";
import { generatePlaylist } from "../core/blitzkit/generatePlaylist";
import { useLocale } from "../hooks/useLocale";
import { App } from "../stores/app";
import { TankFilters } from "../stores/tankFilters";
import type { MaybeSkeletonComponentProps } from "../types/maybeSkeletonComponentProps";
import { LinkI18n } from "./LinkI18n";
import { TankSearchFilters } from "./TankSearchFilters";
const tankDefinitions = await api.tanks();
const POOL_HEIGHT = "16rem";
const FILTERS_WIDTH = "32rem";
export function PlaylistGenerator({ skeleton }: MaybeSkeletonComponentProps) {
const [largeWarningOpen, setLargeWarningOpen] = useState(false);
const { strings, locale } = useLocale();
const wargaming = App.use((state) => state.logins.wargaming);
const filters = TankFilters.use();
const randomTankList = useMemo(
() => fisherYates(Object.values(tankDefinitions.tanks)),
[filters],
);
const tanks = usePromise(
() => filterTanks(filters, randomTankList, wargaming?.id),
// react-promise-suspense has awful type annotations
[filters] as any,
);
const tanksTrimmed = useMemo(() => tanks.slice(0, 65), [filters]);
return (
<>
{strings.website.tools.playlist.large_warning.title}
{literals(
strings.website.tools.playlist.large_warning.description,
{
count: tanks.length,
time: Math.round(tanks.length * ((2 * 4) / 60)),
},
)}
{tanksTrimmed.map((tank) =>
skeleton ? (
) : (
),
)}
{literals(strings.website.tools.playlist.pool_size, {
count: tanks.length,
})}
>
);
}