from typing import List

__all__ = ['Hardware']


class BytesInfo:
    bytes: int
    kilobytes: int
    megabytes: int
    gigabytes: int
    formatted: str

    def __str__(self) -> str: ...

    def __repr__(self) -> str: ...


class CPUInfo:
    full_name: str
    name: str
    architecture: str
    bits: int
    physical_cores: int
    logical_cores: int
    virtualization: bool
    page_size: int
    features: List[str]


class ModuleInfo:
    capacity: BytesInfo


class RAMInfo:
    total: BytesInfo
    type: str
    speed: str
    channels: str
    modules: List[ModuleInfo]


class GPUInfo:
    name: str
    vram: BytesInfo
    vendor: str
    driver_version: str
    driver_date: str


class MotherboardInfo:
    brand: str
    model: str
    chipset: str


class StorageInfo:
    device: str
    type: str
    total: BytesInfo
    used: BytesInfo
    free: BytesInfo


class Hardware:
    CPU: CPUInfo
    RAM: RAMInfo
    GPU: GPUInfo
    Motherboard: MotherboardInfo

    @staticmethod
    def getStorage() -> List[StorageInfo]: ...
