import time
import json

class NetworkManager:
    def __init__(self, power_manager):
        self.power_manager = power_manager
        self.normal_polling_interval = 5  # seconds
        self.idle_polling_interval = 60  # seconds
        self.current_polling_interval = self.normal_polling_interval
        self.last_activity_time = time.time()
        self.load_config()

    def load_config(self):
        try:
            with open('power_saving_config.json', 'r') as f:
                config = json.load(f)
                self.normal_polling_interval = config.get('normal_polling_interval', self.normal_polling_interval)
                self.idle_polling_interval = config.get('idle_polling_interval', self.idle_polling_interval)
                self.current_polling_interval = self.normal_polling_interval # Reset to normal after config load
                print("NetworkManager: Config loaded successfully.")
        except FileNotFoundError:
            print("NetworkManager: power_saving_config.json not found, using default values.")
        except json.JSONDecodeError:
            print("NetworkManager: Error decoding power_saving_config.json, using default values.")

    def poll_network(self):
        # Simulate network polling (replace with actual network code)
        print(f"NetworkManager: Polling network (interval: {self.current_polling_interval}s)")
        time.sleep(self.current_polling_interval)
        return True  # Simulate successful poll

    def run(self):
        while True:
            if self.power_manager.is_idle():
                if self.current_polling_interval != self.idle_polling_interval:
                    print("NetworkManager: Entering idle mode, increasing polling interval.")
                    self.current_polling_interval = self.idle_polling_interval
            else:
                if self.current_polling_interval != self.normal_polling_interval:
                    print("NetworkManager: Activity detected, returning to normal polling interval.")
                    self.current_polling_interval = self.normal_polling_interval
            
            self.poll_network()
