# aiva/frequency_scaling.py
from aiva.config import AivaConfig
import time

class FrequencyScaler:
    def __init__(self):
        self.config = AivaConfig()
        self.upscale_threshold = self.config.get_frequency_upscale_threshold()
        self.downscale_threshold = self.config.get_frequency_downscale_threshold()
        self.current_frequency = 1.0  # Initial frequency
        self.last_updated = time.time()

    def adjust_frequency(self, current_load):
        # Reload config values to allow dynamic updates
        self.upscale_threshold = self.config.get_frequency_upscale_threshold()
        self.downscale_threshold = self.config.get_frequency_downscale_threshold()

        if current_load > self.upscale_threshold:
            self.increase_frequency()
        elif current_load < self.downscale_threshold:
            self.decrease_frequency()

        return self.current_frequency

    def increase_frequency(self):
        # Implement logic to increase frequency
        # This is a placeholder
        if time.time() - self.last_updated > 1: # prevent rapid changes
            self.current_frequency += 0.1  # Increase by 10%
            self.current_frequency = min(self.current_frequency, 2.0) # Max frequency
            self.last_updated = time.time()
            print(f"Increasing frequency to: {self.current_frequency}")

    def decrease_frequency(self):
        # Implement logic to decrease frequency
        # This is a placeholder
        if time.time() - self.last_updated > 1:  # prevent rapid changes
            self.current_frequency -= 0.1  # Decrease by 10%
            self.current_frequency = max(self.current_frequency, 0.5) # Min frequency
            self.last_updated = time.time()
            print(f"Decreasing frequency to: {self.current_frequency}")

# Example usage (for testing):
if __name__ == '__main__':
    scaler = FrequencyScaler()
    print(f"Initial frequency: {scaler.current_frequency}")
    print(f"Upscale Threshold: {scaler.upscale_threshold}")
    print(f"Downscale Threshold: {scaler.downscale_threshold}")

    # Simulate increasing load
    for load in [0.3, 0.7, 0.9, 0.95]:
        new_frequency = scaler.adjust_frequency(load)
        print(f"Load: {load}, Frequency: {new_frequency}")
        time.sleep(1)

    # Simulate decreasing load
    for load in [0.1, 0.05]:
        new_frequency = scaler.adjust_frequency(load)
        print(f"Load: {load}, Frequency: {new_frequency}")
        time.sleep(1)