import { getSectorSettings } from '../services/config.service.js';

/**
 * Hilfsfunktion: Generiert eine zufällige Ganzzahl zwischen min und max (inklusive).
 * Wird benötigt, um die planetaren Schwankungen organisch zu berechnen.
 * 
 * @param {number} min - Der kleinstmögliche Wert
 * @param {number} max - Der größtmögliche Wert
 * 
 * @returns {number} Eine zufällige Ganzzahl
 */
function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

/**
 * Berechnet die physischen Eigenschaften und Startressourcen für einen neuen Heimatplaneten.
 * Greift synchron auf die im RAM liegenden Sektor-Einstellungen zu.
 * 
 * @param {number} position - Die exakte Position des Planeten im Sonnensystem.
 * 
 * @returns {Object} Ein Objekt mit allen berechneten Startwerten für die Datenbank.
 */
export const generateStarterPlanetStats = (position) => {
    const settings = getSectorSettings();
    const planetConfig = settings.planet_generation;
    const diameter = planetConfig.home_planet.fixed_diameter;
    const rawFields = Math.floor(diameter * planetConfig.dimensions.fields_per_km_diameter);
    const maxFields = rawFields + planetConfig.bonus_fields;
    const zoneString = String(position);
    const tempZone = planetConfig.temperature_zones[zoneString] || planetConfig.temperature_zones["8"];

    const tempMidpoint = Math.floor((tempZone.temp_min + tempZone.temp_max) / 2);
    const planetTempMin = getRandomInt(tempZone.temp_min, tempMidpoint);
    let planetTempMax = getRandomInt(tempMidpoint, tempZone.temp_max);
    if (planetTempMax - planetTempMin < 20) {
        planetTempMax = planetTempMin + 20;
        planetTempMax = Math.min(planetTempMax, tempZone.temp_max);
    }

    const popIdle = planetConfig.home_planet.pop_idle;
    const popInjured = planetConfig.home_planet.pop_injured;
    const resFoodBase = planetConfig.home_planet.res_food_base;

    return {
        diameter: diameter,
        fields_max: maxFields,
        temp_min: planetTempMin,
        temp_max: planetTempMax,
        pop_idle: popIdle,
        pop_injured: popInjured,
        res_food_base: resFoodBase
    };
};