/**
 * A "scratcher" style lottery ticket
 */
export type LotteryCard = {
    /** The ID of the card */
    ID: number,
    /** The card's winning numbers */
    WinningNumbers: number[],
    /** The numbers the player "drew" by playing the card */
    PlayedNumbers: number[],
    /** The number of winning numbers the player "drew" */
    NumberOfWins: number
};

export function ParseLotteryCards(cardStrings: string[]): LotteryCard[] {
    const cards: LotteryCard[] = [];

    for (const card of cardStrings) {
        // Split the card into a "front side", the ID and winning numbers, and a "back side", the drawn numbers
        const [frontSide, backSide] = card.split('|');
        // Split the front side string into just the numbers inside
        const frontSideNumbers = frontSide.split(/\D/).filter((n) => n != '').map((n) => Number(n));
        // Split the back side string into just the numbers inside
        const playedNumbers = backSide.split(/\D/).filter((n) => n != '').map((n) => Number(n));

        const parsedCard = {
            // First number is always the ID
            ID: frontSideNumbers.shift() || -1,
            // The rest of the front side are the winning numbers
            WinningNumbers: frontSideNumbers,
            // The entire "back side" is the played numbers
            PlayedNumbers: playedNumbers,
            // Initial value to be filled in later
            NumberOfWins: 0,
        };

        // Count the number of winning numbers the player drew
        parsedCard.WinningNumbers.forEach((n) => {
            if (parsedCard.PlayedNumbers.includes(n)) { parsedCard.NumberOfWins++ }
        });

        cards.push(parsedCard);
    }

    return cards;
}