import { BLANK } from '@scrabble-solver/constants';
import { type Tile } from '@scrabble-solver/types';

import { type Rack } from '@/types';

interface CharacterTilePair {
  character: string | null;
  tile: Tile | null;
}

export const zipCharactersAndTiles = (characters: Rack, tiles: Tile[]): CharacterTilePair[] => {
  let remainingTiles = [...tiles];

  return characters.map((character) => {
    const index = remainingTiles.findIndex((tile) =>
      character === BLANK ? tile.isBlank : character === tile.character,
    );

    if (index >= 0) {
      const tile = remainingTiles[index];
      remainingTiles = [...remainingTiles.slice(0, index), ...remainingTiles.slice(index + 1)];

      return { character, tile };
    }

    return { character, tile: null };
  });
};
