import time
import threading
from typing import Dict, Any

from core.utils import calculate_jittered_interval

class ResourceManager:
    def __init__(self, config: Dict[str, Any]):
        self.config = config
        self.resources: Dict[str, Any] = {}
        self.downscale_check_interval = self.config.get('downscale_check_interval', 60)  # Default to 60 seconds
        self.downscale_check_interval_jitter = self.config.get('downscale_check_interval_jitter', 0.1) # default to 10%
        self.downscale_thread = None
        self.stop_downscale_thread = False

    def start(self):
        self.downscale_thread = threading.Thread(target=self._downscale_loop, daemon=True)
        self.downscale_thread.start()

    def stop(self):
        self.stop_downscale_thread = True
        if self.downscale_thread:
            self.downscale_thread.join()

    def _downscale_loop(self):
        while not self.stop_downscale_thread:
            try:
                # Perform downscaling logic here (replace with actual implementation)
                print("Performing downscale check...")
                # Calculate jittered interval
                jittered_interval = calculate_jittered_interval(self.downscale_check_interval, self.downscale_check_interval_jitter)
                time.sleep(jittered_interval)
            except Exception as e:
                print(f"Error in downscale loop: {e}")
                # Consider adding error handling and logging here
                time.sleep(self.downscale_check_interval) # Fallback to base interval on error

    def get_resource(self, resource_id: str) -> Any:
        return self.resources.get(resource_id)

    def add_resource(self, resource_id: str, resource: Any):
        self.resources[resource_id] = resource

    def remove_resource(self, resource_id: str):
        if resource_id in self.resources:
            del self.resources[resource_id]
