casino/frontend/src/app/services/game.service.ts

104 lines
2.5 KiB
TypeScript

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
export interface Game {
id: string;
name: string;
description: string;
imageUrl: string;
minBet: number;
maxBet: number;
rtp: number;
lastWin: number;
winChance: number;
lastWinner: string;
trending: boolean;
maxWin: number;
popularity: number;
volatility: 'low' | 'medium' | 'high';
features: string[];
}
@Injectable({
providedIn: 'root',
})
export class GameService {
private readonly INITIAL_GAMES: Game[] = [
{
id: 'mega-fortune',
name: 'Mega Fortune Dreams',
description: '🔥 Progressive Jackpot at €1.2M - Must Drop Today!',
imageUrl: 'assets/games/mega-fortune.jpg',
minBet: 0.2,
maxBet: 100,
rtp: 96.5,
lastWin: 15789,
winChance: 99.9,
lastWinner: 'VIP Player',
trending: true,
maxWin: 1000000,
popularity: 98,
volatility: 'high',
features: ['Progressive Jackpot', 'Free Spins', 'Multipliers'],
},
{
id: 'lightning-roulette',
name: 'Lightning Roulette',
description: '⚡️ 500x Multipliers Active - Hot Streak!',
imageUrl: 'assets/games/lightning-roulette.jpg',
minBet: 1,
maxBet: 500,
rtp: 97.1,
lastWin: 23456,
winChance: 99.7,
lastWinner: 'New Player',
trending: true,
maxWin: 500000,
popularity: 95,
volatility: 'medium',
features: ['Lightning Multipliers', 'Live Dealer', 'Instant Wins'],
},
];
private readonly STAT_RANGES = {
WIN: {
MIN: 10000,
MAX: 50000,
},
WIN_CHANCE: {
MIN: 99,
MAX: 100,
},
POPULARITY: {
MIN: 80,
MAX: 100,
},
};
private readonly games = new BehaviorSubject<Game[]>(this.INITIAL_GAMES);
readonly games$ = this.games.asObservable();
updateGameStats(): void {
const updatedGames = this.games.value.map((game) => ({
...game,
...this.generateNewStats(),
}));
this.games.next(updatedGames);
}
getGameById(id: string): Game | undefined {
return this.games.value.find((game) => game.id === id);
}
private generateNewStats(): Partial<Game> {
return {
lastWin: this.getRandomInRange(this.STAT_RANGES.WIN),
winChance: this.getRandomInRange(this.STAT_RANGES.WIN_CHANCE),
popularity: this.getRandomInRange(this.STAT_RANGES.POPULARITY),
};
}
private getRandomInRange(range: { MIN: number; MAX: number }): number {
return Math.floor(Math.random() * (range.MAX - range.MIN)) + range.MIN;
}
}