from typing import Protocol from custom_components.powercalc.power_profile.power_profile import DeviceType, DiscoveryBy class Loader(Protocol): async def initialize(self) -> None: """Initialize the loader.""" async def get_manufacturer_listing( self, device_types: set[DeviceType] | None, discovery_by: DiscoveryBy | None = None, ) -> set[tuple[str, str]]: """Get listing of possible manufacturers.""" async def find_manufacturers(self, search: str) -> set[str]: """Check if a manufacturer is available. Also must check aliases.""" async def get_model_listing( self, manufacturer: str, device_types: set[DeviceType] | None, discovery_by: DiscoveryBy | None = None, ) -> set[tuple[str, str]]: """Get listing of available models and display names for a given manufacturer.""" async def load_model(self, manufacturer: str, model: str) -> tuple[dict, str] | None: """Load and optionally download a model profile.""" async def find_model(self, manufacturer: str, search: set[str]) -> list[str]: """Check if a model is available. Also must check aliases.""" async def find_model_migration(self, manufacturer: str, model: str) -> str | None: """Return the canonical model id for a legacy profile id using library metadata."""