import { World, createWorld } from '../models/World';
import { Position } from '../models/Position';
import { WorldConfig } from '../config/world.config';
import { randomPositionInCircle } from '../utils/math';

/**
 * 世界管理器
 * 负责世界初始化和地图管理
 */
class WorldManager {
    private world: World | null = null;

    /**
     * 初始化世界
     */
    initialize(): void {
        if (this.world) {
            console.log('世界已经初始化，跳过重复初始化');
            return;
        }

        this.world = createWorld(
            WorldConfig.WORLD_WIDTH,
            WorldConfig.WORLD_HEIGHT,
            WorldConfig.SPAWN_RADIUS
        );

        console.log(`世界初始化完成:`);
        console.log(`  尺寸: ${this.world.width}x${this.world.height}`);
        console.log(`  中心点: (${this.world.center.x}, ${this.world.center.y})`);
        console.log(`  出生区域半径: ${this.world.spawnRadius}`);
    }

    /**
     * 获取世界实例
     */
    getWorld(): World {
        if (!this.world) {
            throw new Error('世界尚未初始化');
        }
        return this.world;
    }

    /**
     * 生成出生点位置
     */
    generateSpawnPosition(): Position {
        if (!this.world) {
            throw new Error('世界尚未初始化');
        }
        
        return randomPositionInCircle(this.world.center, this.world.spawnRadius);
    }

    /**
     * 检查位置是否在世界范围内
     */
    isValidPosition(pos: Position): boolean {
        if (!this.world) {
            return false;
        }
        
        return pos.x >= 0 && pos.x < this.world.width && 
               pos.y >= 0 && pos.y < this.world.height;
    }

    /**
     * 获取世界中心点
     */
    getCenter(): Position {
        if (!this.world) {
            throw new Error('世界尚未初始化');
        }
        return this.world.center;
    }
}

// 导出单例
export const worldManager = new WorldManager();
