// Making a whole new file for this, that's how complex it looks like it'll be.
import { Canvas, createCanvas, loadImage, GlobalFonts, SKRSContext2D } from "@napi-rs/canvas";

import {
  GenerateBattlerOptions,
  GenerateBattleImageOptions,
  PlayerActionOptions,
  Colour,
  Opponents,
  PlayerActions,
  CustomActionOptions
} from "./types";

import {
  generateBattler, drawText, applyText,
} from "./utils";

type Rank = "Beginner" | "Casual" | "Pro" | "Master";

type PartyOptions = {
  ready: string;
  
  player1: string;
  username1: string;
  rank1: Rank;

  player2?: string;
  username2?: string;
  rank2?: Rank;

  player3?: string;
  username3?: string;
  rank3?: Rank;

  player4?: string;
  username4?: string;
  rank4?: Rank;

  player5?: string;
  username5?: string;
  rank5?: Rank;

  player6?: string;
  username6?: string;
  rank6?: Rank;

  player7?: string;
  username7?: string;
  rank7?: Rank;

  player8?: string;
  username8?: string;
  rank8?: Rank;
}

function generateMatchType(opts: PartyOptions): string {
  const keys: (keyof PartyOptions)[] = [
    'player1', 'player2', 'player3', 'player4', 'player5', 'player6', 'player7', 'player8'
  ];
  let playerCount = keys.reduce((count, key) => opts[key] ? count + 1 : count, 0);
  // If there's an odd number of players, round up to the next even number
  if (playerCount % 2 !== 0) {
    playerCount++;
  }
  // Divide by 2 to get the number for each team, since it's evenly matched (e.g. "1v1", "2v2")
  const teamSize = playerCount / 2;
  return `${teamSize}v${teamSize}`;
}


export default async function party(request: Request, url: import("url").URL): Promise<Response> {
  const opts = Object.fromEntries(
    Array.from(url.searchParams.entries())
      .map(([key, value]) => [key, value.replaceAll('+', ' ')]),
  ) as PartyOptions;

  if (!opts.player1 && !opts.username1 && !opts.rank1) {
    return Response.json({
      error: "At least one player must be in the party"
    })
  }


}