<?php

/**
 * Generated by phpSPO model generator 2020-05-24T22:08:35+00:00 
 */
namespace Office365\Graph;

use Office365\Runtime\ClientObject;
use Office365\Runtime\ResourcePath;
/**
 *  "Represents a device registered in the organization."
 */
class Device extends ClientObject
{
    /**
     *  **true** if the account is enabled; otherwise, **false**. Required.
     * @return bool
     */
    public function getAccountEnabled()
    {
        if (!$this->isPropertyAvailable("AccountEnabled")) {
            return null;
        }
        return $this->getProperty("AccountEnabled");
    }
    /**
     *  **true** if the account is enabled; otherwise, **false**. Required.
     * @var bool
     */
    public function setAccountEnabled($value)
    {
        $this->setProperty("AccountEnabled", $value, true);
    }
    /**
     *  Unique identifier set by Azure Device Registration Service at the time of registration. 
     * @return string
     */
    public function getDeviceId()
    {
        if (!$this->isPropertyAvailable("DeviceId")) {
            return null;
        }
        return $this->getProperty("DeviceId");
    }
    /**
     *  Unique identifier set by Azure Device Registration Service at the time of registration. 
     * @var string
     */
    public function setDeviceId($value)
    {
        $this->setProperty("DeviceId", $value, true);
    }
    /**
     *  For interal use only. Set to null. 
     * @return string
     */
    public function getDeviceMetadata()
    {
        if (!$this->isPropertyAvailable("DeviceMetadata")) {
            return null;
        }
        return $this->getProperty("DeviceMetadata");
    }
    /**
     *  For interal use only. Set to null. 
     * @var string
     */
    public function setDeviceMetadata($value)
    {
        $this->setProperty("DeviceMetadata", $value, true);
    }
    /**
     *  For interal use only. 
     * @return integer
     */
    public function getDeviceVersion()
    {
        if (!$this->isPropertyAvailable("DeviceVersion")) {
            return null;
        }
        return $this->getProperty("DeviceVersion");
    }
    /**
     *  For interal use only. 
     * @var integer
     */
    public function setDeviceVersion($value)
    {
        $this->setProperty("DeviceVersion", $value, true);
    }
    /**
     * The display name for the device. Required. 
     * @return string
     */
    public function getDisplayName()
    {
        if (!$this->isPropertyAvailable("DisplayName")) {
            return null;
        }
        return $this->getProperty("DisplayName");
    }
    /**
     * The display name for the device. Required. 
     * @var string
     */
    public function setDisplayName($value)
    {
        $this->setProperty("DisplayName", $value, true);
    }
    /**
     * **true** if the device complies with Mobile Device Management (MDM) policies; otherwise, **false**. Read-only. This can only be updated by Intune for any device OS type or by an [approved MDM app](https://docs.microsoft.com/windows/client-management/mdm/azure-active-directory-integration-with-mdm) for Windows OS devices.
     * @return bool
     */
    public function getIsCompliant()
    {
        if (!$this->isPropertyAvailable("IsCompliant")) {
            return null;
        }
        return $this->getProperty("IsCompliant");
    }
    /**
     * **true** if the device complies with Mobile Device Management (MDM) policies; otherwise, **false**. Read-only. This can only be updated by Intune for any device OS type or by an [approved MDM app](https://docs.microsoft.com/windows/client-management/mdm/azure-active-directory-integration-with-mdm) for Windows OS devices.
     * @var bool
     */
    public function setIsCompliant($value)
    {
        $this->setProperty("IsCompliant", $value, true);
    }
    /**
     * **true** if the device is managed by a Mobile Device Management (MDM) app; otherwise, **false**. This can only be updated by Intune for any device OS type or by an [approved MDM app](https://docs.microsoft.com/windows/client-management/mdm/azure-active-directory-integration-with-mdm) for Windows OS devices. 
     * @return bool
     */
    public function getIsManaged()
    {
        if (!$this->isPropertyAvailable("IsManaged")) {
            return null;
        }
        return $this->getProperty("IsManaged");
    }
    /**
     * **true** if the device is managed by a Mobile Device Management (MDM) app; otherwise, **false**. This can only be updated by Intune for any device OS type or by an [approved MDM app](https://docs.microsoft.com/windows/client-management/mdm/azure-active-directory-integration-with-mdm) for Windows OS devices. 
     * @var bool
     */
    public function setIsManaged($value)
    {
        $this->setProperty("IsManaged", $value, true);
    }
    /**
     * Application identifier used to register device into MDM. <br><br>Read-only. Supports $filter.
     * @return string
     */
    public function getMdmAppId()
    {
        if (!$this->isPropertyAvailable("MdmAppId")) {
            return null;
        }
        return $this->getProperty("MdmAppId");
    }
    /**
     * Application identifier used to register device into MDM. <br><br>Read-only. Supports $filter.
     * @var string
     */
    public function setMdmAppId($value)
    {
        $this->setProperty("MdmAppId", $value, true);
    }
    /**
     * **true** if this object is synced from an on-premises directory; **false** if this object was originally synced from an on-premises directory but is no longer synced; **null** if this object has never been synced from an on-premises directory (default). Read-only. 
     * @return bool
     */
    public function getOnPremisesSyncEnabled()
    {
        if (!$this->isPropertyAvailable("OnPremisesSyncEnabled")) {
            return null;
        }
        return $this->getProperty("OnPremisesSyncEnabled");
    }
    /**
     * **true** if this object is synced from an on-premises directory; **false** if this object was originally synced from an on-premises directory but is no longer synced; **null** if this object has never been synced from an on-premises directory (default). Read-only. 
     * @var bool
     */
    public function setOnPremisesSyncEnabled($value)
    {
        $this->setProperty("OnPremisesSyncEnabled", $value, true);
    }
    /**
     *  The type of operating system on the device. Required. 
     * @return string
     */
    public function getOperatingSystem()
    {
        if (!$this->isPropertyAvailable("OperatingSystem")) {
            return null;
        }
        return $this->getProperty("OperatingSystem");
    }
    /**
     *  The type of operating system on the device. Required. 
     * @var string
     */
    public function setOperatingSystem($value)
    {
        $this->setProperty("OperatingSystem", $value, true);
    }
    /**
     * The version of the operating system on the device. Required. 
     * @return string
     */
    public function getOperatingSystemVersion()
    {
        if (!$this->isPropertyAvailable("OperatingSystemVersion")) {
            return null;
        }
        return $this->getProperty("OperatingSystemVersion");
    }
    /**
     * The version of the operating system on the device. Required. 
     * @var string
     */
    public function setOperatingSystemVersion($value)
    {
        $this->setProperty("OperatingSystemVersion", $value, true);
    }
    /**
     *  For interal use only. Not nullable. 
     * @return array
     */
    public function getPhysicalIds()
    {
        if (!$this->isPropertyAvailable("PhysicalIds")) {
            return null;
        }
        return $this->getProperty("PhysicalIds");
    }
    /**
     *  For interal use only. Not nullable. 
     * @var array
     */
    public function setPhysicalIds($value)
    {
        $this->setProperty("PhysicalIds", $value, true);
    }
    /**
     * The profile type of the device. Possible values:<br />**RegisteredDevice** (default)<br />**SecureVM**<br />**Printer**<br />**Shared**<br />**IoT**
     * @return string
     */
    public function getProfileType()
    {
        if (!$this->isPropertyAvailable("ProfileType")) {
            return null;
        }
        return $this->getProperty("ProfileType");
    }
    /**
     * The profile type of the device. Possible values:<br />**RegisteredDevice** (default)<br />**SecureVM**<br />**Printer**<br />**Shared**<br />**IoT**
     * @var string
     */
    public function setProfileType($value)
    {
        $this->setProperty("ProfileType", $value, true);
    }
    /**
     *  List of labels applied to the device by the system. 
     * @return array
     */
    public function getSystemLabels()
    {
        if (!$this->isPropertyAvailable("SystemLabels")) {
            return null;
        }
        return $this->getProperty("SystemLabels");
    }
    /**
     *  List of labels applied to the device by the system. 
     * @var array
     */
    public function setSystemLabels($value)
    {
        $this->setProperty("SystemLabels", $value, true);
    }
    /**
     *  Type of trust for the joined device. Read-only. Possible values: <br />**Workplace** - indicates *bring your own personal devices*<br />**AzureAd** - Cloud only joined devices<br />**ServerAd** - on-premises domain joined devices joined to Azure AD. For more details, see [Introduction to device management in Azure Active Directory](https://docs.microsoft.com/azure/active-directory/device-management-introduction) 
     * @return string
     */
    public function getTrustType()
    {
        if (!$this->isPropertyAvailable("TrustType")) {
            return null;
        }
        return $this->getProperty("TrustType");
    }
    /**
     *  Type of trust for the joined device. Read-only. Possible values: <br />**Workplace** - indicates *bring your own personal devices*<br />**AzureAd** - Cloud only joined devices<br />**ServerAd** - on-premises domain joined devices joined to Azure AD. For more details, see [Introduction to device management in Azure Active Directory](https://docs.microsoft.com/azure/active-directory/device-management-introduction) 
     * @var string
     */
    public function setTrustType($value)
    {
        $this->setProperty("TrustType", $value, true);
    }
}