import numpy as np
import random
from settings import WorldSettings

class ArtisticClimateGenerator:
    def __init__(self, height_map: np.ndarray, settings: WorldSettings):
        self.height_map = height_map
        self.settings = settings
        random.seed(settings.get_valid_seed())
        
        # Оригинальные цвета из ClimateGenerator
        self.biome_colors = {
            'water': (0.2, 0.4, 0.8, 1.0),
            'ice': (0.95, 0.95, 0.98, 0.8),
            'tundra': (0.4, 0.6, 0.9, 0.9),
            'taiga': (0.1, 0.3, 0.15, 1.0),
            'forest': (0.3, 0.6, 0.3, 1.0),
            'desert': (0.9, 0.6, 0.2, 1.0),
            'steppe': (0.8, 0.75, 0.5, 1.0),
            'swamp': (0.4, 0.35, 0.2, 0.9),
            'jungle': (0.1, 0.5, 0.1, 1.0),
            'savanna': (0.8, 0.7, 0.3, 1.0)
        }

    def generate_biome_map(self, enabled_biomes=None) -> np.ndarray:
        """Полностью случайное распределение биомов"""
        if enabled_biomes is None:
            enabled_biomes = list(self.biome_colors.keys())
            
        height, width = self.height_map.shape
        biome_map = np.zeros((height, width, 4), dtype=np.float32)
        
        # Включаем воду, если она есть в списке
        water_included = 'water' in enabled_biomes
        water_level = 0.05
        
        for y in range(height):
            for x in range(width):
                # Если это вода - рисуем воду и переходим к следующей точке
                if water_included and self.height_map[y,x] < water_level:
                    biome_map[y,x] = self.biome_colors['water']
                    continue
                
                # Случайный выбор любого биома
                available_biomes = [b for b in enabled_biomes if b != 'water'] or ['forest']
                random_biome = random.choice(available_biomes)
                biome_map[y,x] = self.biome_colors[random_biome]
                
        return biome_map