import time
import yaml

class DownscaleTimer:
    def __init__(self, initial_delay, config_path='aiva/config.yaml'):
        self.initial_delay = initial_delay
        self.current_delay = initial_delay
        self.last_reset_time = time.time()
        self.config_path = config_path
        self.downscale_timer_decrease_percentage = self._load_downscale_timer_decrease_percentage()

    def _load_downscale_timer_decrease_percentage(self):
        try:
            with open(self.config_path, 'r') as f:
                config = yaml.safe_load(f)
                percentage = config['resource_management'].get('downscale_timer_decrease_percentage', 10.0)
                if not 0 <= percentage <= 100:
                    print("Warning: downscale_timer_decrease_percentage is outside the valid range (0-100). Using default value of 10.0.")
                    return 10.0
                return percentage
        except FileNotFoundError:
            print(f"Warning: Config file not found at {self.config_path}. Using default downscale_timer_decrease_percentage of 10.0.")
            return 10.0
        except KeyError:
            print("Warning: downscale_timer_decrease_percentage not found in config. Using default value of 10.0.")
            return 10.0

    def get_delay(self):
        return self.current_delay

    def reset(self):
        self.current_delay = self.initial_delay
        self.last_reset_time = time.time()

    def decrease(self):
        decrease_amount = self.current_delay * (self.downscale_timer_decrease_percentage / 100.0)
        self.current_delay = max(0, self.current_delay - decrease_amount)

    def time_since_reset(self):
        return time.time() - self.last_reset_time

if __name__ == '__main__':
    # Example usage:
    timer = DownscaleTimer(initial_delay=60)
    print(f"Initial delay: {timer.get_delay()}")

    time.sleep(5)
    print(f"Time since reset: {timer.time_since_reset()}")

    timer.decrease()
    print(f"Delay after decrease: {timer.get_delay()}")

    timer.reset()
    print(f"Delay after reset: {timer.get_delay()}")
