<?php
/**
 * PowerGrid OS - Stability Calculation Module
 * STATUS: CRITICAL ERROR - SYSTEM UNSTABLE
 * 
 * Cel: Funkcja musi zwracać true tylko gdy:
 * 1. Częstotliwość ($current_freq) jest IDEALNIE RÓWNA $target_freq (dokładność 4 miejsca).
 * 2. Średnie obciążenie węzłów ($avg_load) jest poniżej 1000.
 * 
 * Błędy do naprawienia:
 * 1. Nieprawidłowy dostęp do tablicy (węzły mają klucze 'metadata' -> 'load').
 * 2. Błąd dzielenia przez zero przy pustej tablicy $nodes.
 * 3. Użycie nienależytej precyzji przy porównywaniu float (użyj round() lub bc_comp).
 * 4. Funkcja nie może mieć efektów ubocznych (nie zmieniaj zmiennych globalnych).
 */

$grid_status = "STABLE"; // Globalny stan - NIE MOŻE BYĆ MODYFIKOWANY PRZEZ FUNKCJĘ

if (!function_exists('calculate_grid_stability')) {
    function calculate_grid_stability(array $nodes, $target_freq)
    {
        global $grid_status;

        $total_load = 0;
        foreach ($nodes as $node) {
            // ERROR 1: Zły klucz ($node['power'] zamiast $node['metadata']['load'])
            $total_load += $node['power'];
        }

        // ERROR 2: Brak sprawdzenia count($nodes) - Division by zero
        $avg_load = $total_load / count($nodes);

        // ERROR 4: Efekt uboczny (modyfikacja stanu globalnego)
        if ($avg_load > 1000) {
            $grid_status = "CRITICAL";
        }

        $current_freq = 50.0000;

        // ERROR 3: Nierzetelne porównanie float (== zamiast precyzji 4 miejsc)
        // Oraz brak warunku obciążenia w zwracanym wyniku
        if ($current_freq == $target_freq && $avg_load > 0 && $avg_load < 1000) {
            return true;
        }

        return false;
    }
}
