from leapp.models import fields, Model
from leapp.topics import SystemFactsTopic


class CPUInfo(Model):
    """
    The model represents information about CPUs.

    The model currently doesn't represent all information about cpus could
    provide on the machine. Just part of them, in case any other attributes
    will be needed, the model can be extended.

    The provided info is aggregated - like from lscpu command. Expecting all
    CPUs are same on the machine (at least for now).
    """

    topic = SystemFactsTopic

    machine_type = fields.Nullable(fields.Integer())
    """
    Specifies machine type if provided.

    This is important for the check of s390x, whether the HW is supported
    by RHEL 8.
    """

    # TODO: regarding possible problems with LOCALE, I am keeping most of
    # parts commented out and focus just on the one particular needed info.
    # architecture = fields.String()
    # """ Architecture of the CPU (e.g. x86_64) """

    # byte_order = fields.StringEnum(['Little Endian', 'Big Endian'])
    # """ Byte order of the CPU: 'Little Endian' or 'Big Endian' """

    flags = fields.List(fields.String(), default=[])
    """ Specifies flags/features of the CPU. """

    # hypervisor = fields.Nullable(fields.String())
    # hypervisor_vendor = fields.Nullable(fields.String())

    # number = fields.Integer()
    # """ Number of CPUs. """

    # vendor_id = fields.Nullable(fields.String())
    # """ ID of vendor of the CPU. """

    # virtualization = fields.Nullable(fields.String())
    # virtualization_type = fields.Nullable(fields.String())
