import { Game } from '../domain/Game';
import { GameType } from '../domain/enums/GameType';
import { GameRepository } from '../domain/interfaces/GameRepository';
import { v4 as uuidv4 } from 'uuid';
import { RuleFactory } from './RuleFactory';

export class GameFactory {
    constructor(
        private gameRepository: GameRepository,
        private ruleFactory: RuleFactory
    ) {}

    async createGame(gameType: GameType, initialCondition: string): Promise<Game> {
        // 使用规则服务验证初始条件
        const rule = this.ruleFactory.createRule(gameType);
        const isValid = await rule.validateInitialCondition(initialCondition);
        
        if (!isValid) {
            throw new Error('无效的初始条件');
        }

        const game = new Game(uuidv4(), gameType, initialCondition);
        await this.gameRepository.save(game);
        return game;
    }
} 