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(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 { 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; } }