<?php
/**
* Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the MIT License.  See License in the project root for license information.
* 
* WindowsDeviceMalwareState File
* PHP version 7
*
* @category  Library
* @package   Microsoft.Graph
* @copyright (c) Microsoft Corporation. All rights reserved.
* @license   https://opensource.org/licenses/MIT MIT License
* @link      https://graph.microsoft.com
*/
namespace Microsoft\Graph\Model;

/**
* WindowsDeviceMalwareState class
*
* @category  Model
* @package   Microsoft.Graph
* @copyright (c) Microsoft Corporation. All rights reserved.
* @license   https://opensource.org/licenses/MIT MIT License
* @link      https://graph.microsoft.com
*/
class WindowsDeviceMalwareState extends Entity
{
    /**
    * Gets the additionalInformationUrl
    * Information URL to learn more about the malware
    *
    * @return string|null The additionalInformationUrl
    */
    public function getAdditionalInformationUrl()
    {
        if (array_key_exists("additionalInformationUrl", $this->_propDict)) {
            return $this->_propDict["additionalInformationUrl"];
        } else {
            return null;
        }
    }

    /**
    * Sets the additionalInformationUrl
    * Information URL to learn more about the malware
    *
    * @param string $val The additionalInformationUrl
    *
    * @return WindowsDeviceMalwareState
    */
    public function setAdditionalInformationUrl($val)
    {
        $this->_propDict["additionalInformationUrl"] = $val;
        return $this;
    }

    /**
    * Gets the category
    * Category of the malware. Possible values are: invalid, adware, spyware, passwordStealer, trojanDownloader, worm, backdoor, remoteAccessTrojan, trojan, emailFlooder, keylogger, dialer, monitoringSoftware, browserModifier, cookie, browserPlugin, aolExploit, nuker, securityDisabler, jokeProgram, hostileActiveXControl, softwareBundler, stealthNotifier, settingsModifier, toolBar, remoteControlSoftware, trojanFtp, potentialUnwantedSoftware, icqExploit, trojanTelnet, exploit, filesharingProgram, malwareCreationTool, remoteControlSoftware, tool, trojanDenialOfService, trojanDropper, trojanMassMailer, trojanMonitoringSoftware, trojanProxyServer, virus, known, unknown, spp, behavior, vulnerability, policy, enterpriseUnwantedSoftware, ransom, hipsRule.
    *
    * @return WindowsMalwareCategory|null The category
    */
    public function getCategory()
    {
        if (array_key_exists("category", $this->_propDict)) {
            if (is_a($this->_propDict["category"], "\Microsoft\Graph\Model\WindowsMalwareCategory") || is_null($this->_propDict["category"])) {
                return $this->_propDict["category"];
            } else {
                $this->_propDict["category"] = new WindowsMalwareCategory($this->_propDict["category"]);
                return $this->_propDict["category"];
            }
        }
        return null;
    }

    /**
    * Sets the category
    * Category of the malware. Possible values are: invalid, adware, spyware, passwordStealer, trojanDownloader, worm, backdoor, remoteAccessTrojan, trojan, emailFlooder, keylogger, dialer, monitoringSoftware, browserModifier, cookie, browserPlugin, aolExploit, nuker, securityDisabler, jokeProgram, hostileActiveXControl, softwareBundler, stealthNotifier, settingsModifier, toolBar, remoteControlSoftware, trojanFtp, potentialUnwantedSoftware, icqExploit, trojanTelnet, exploit, filesharingProgram, malwareCreationTool, remoteControlSoftware, tool, trojanDenialOfService, trojanDropper, trojanMassMailer, trojanMonitoringSoftware, trojanProxyServer, virus, known, unknown, spp, behavior, vulnerability, policy, enterpriseUnwantedSoftware, ransom, hipsRule.
    *
    * @param WindowsMalwareCategory $val The category
    *
    * @return WindowsDeviceMalwareState
    */
    public function setCategory($val)
    {
        $this->_propDict["category"] = $val;
        return $this;
    }

    /**
    * Gets the detectionCount
    * Number of times the malware is detected
    *
    * @return int|null The detectionCount
    */
    public function getDetectionCount()
    {
        if (array_key_exists("detectionCount", $this->_propDict)) {
            return $this->_propDict["detectionCount"];
        } else {
            return null;
        }
    }

    /**
    * Sets the detectionCount
    * Number of times the malware is detected
    *
    * @param int $val The detectionCount
    *
    * @return WindowsDeviceMalwareState
    */
    public function setDetectionCount($val)
    {
        $this->_propDict["detectionCount"] = intval($val);
        return $this;
    }

    /**
    * Gets the displayName
    * Malware name
    *
    * @return string|null The displayName
    */
    public function getDisplayName()
    {
        if (array_key_exists("displayName", $this->_propDict)) {
            return $this->_propDict["displayName"];
        } else {
            return null;
        }
    }

    /**
    * Sets the displayName
    * Malware name
    *
    * @param string $val The displayName
    *
    * @return WindowsDeviceMalwareState
    */
    public function setDisplayName($val)
    {
        $this->_propDict["displayName"] = $val;
        return $this;
    }

    /**
    * Gets the executionState
    * Execution status of the malware like blocked/executing etc. Possible values are: unknown, blocked, allowed, running, notRunning.
    *
    * @return WindowsMalwareExecutionState|null The executionState
    */
    public function getExecutionState()
    {
        if (array_key_exists("executionState", $this->_propDict)) {
            if (is_a($this->_propDict["executionState"], "\Microsoft\Graph\Model\WindowsMalwareExecutionState") || is_null($this->_propDict["executionState"])) {
                return $this->_propDict["executionState"];
            } else {
                $this->_propDict["executionState"] = new WindowsMalwareExecutionState($this->_propDict["executionState"]);
                return $this->_propDict["executionState"];
            }
        }
        return null;
    }

    /**
    * Sets the executionState
    * Execution status of the malware like blocked/executing etc. Possible values are: unknown, blocked, allowed, running, notRunning.
    *
    * @param WindowsMalwareExecutionState $val The executionState
    *
    * @return WindowsDeviceMalwareState
    */
    public function setExecutionState($val)
    {
        $this->_propDict["executionState"] = $val;
        return $this;
    }

    /**
    * Gets the initialDetectionDateTime
    * Initial detection datetime of the malware
    *
    * @return \DateTime|null The initialDetectionDateTime
    */
    public function getInitialDetectionDateTime()
    {
        if (array_key_exists("initialDetectionDateTime", $this->_propDict)) {
            if (is_a($this->_propDict["initialDetectionDateTime"], "\DateTime") || is_null($this->_propDict["initialDetectionDateTime"])) {
                return $this->_propDict["initialDetectionDateTime"];
            } else {
                $this->_propDict["initialDetectionDateTime"] = new \DateTime($this->_propDict["initialDetectionDateTime"]);
                return $this->_propDict["initialDetectionDateTime"];
            }
        }
        return null;
    }

    /**
    * Sets the initialDetectionDateTime
    * Initial detection datetime of the malware
    *
    * @param \DateTime $val The initialDetectionDateTime
    *
    * @return WindowsDeviceMalwareState
    */
    public function setInitialDetectionDateTime($val)
    {
        $this->_propDict["initialDetectionDateTime"] = $val;
        return $this;
    }

    /**
    * Gets the lastStateChangeDateTime
    * The last time this particular threat was changed
    *
    * @return \DateTime|null The lastStateChangeDateTime
    */
    public function getLastStateChangeDateTime()
    {
        if (array_key_exists("lastStateChangeDateTime", $this->_propDict)) {
            if (is_a($this->_propDict["lastStateChangeDateTime"], "\DateTime") || is_null($this->_propDict["lastStateChangeDateTime"])) {
                return $this->_propDict["lastStateChangeDateTime"];
            } else {
                $this->_propDict["lastStateChangeDateTime"] = new \DateTime($this->_propDict["lastStateChangeDateTime"]);
                return $this->_propDict["lastStateChangeDateTime"];
            }
        }
        return null;
    }

    /**
    * Sets the lastStateChangeDateTime
    * The last time this particular threat was changed
    *
    * @param \DateTime $val The lastStateChangeDateTime
    *
    * @return WindowsDeviceMalwareState
    */
    public function setLastStateChangeDateTime($val)
    {
        $this->_propDict["lastStateChangeDateTime"] = $val;
        return $this;
    }

    /**
    * Gets the severity
    * Severity of the malware. Possible values are: unknown, low, moderate, high, severe.
    *
    * @return WindowsMalwareSeverity|null The severity
    */
    public function getSeverity()
    {
        if (array_key_exists("severity", $this->_propDict)) {
            if (is_a($this->_propDict["severity"], "\Microsoft\Graph\Model\WindowsMalwareSeverity") || is_null($this->_propDict["severity"])) {
                return $this->_propDict["severity"];
            } else {
                $this->_propDict["severity"] = new WindowsMalwareSeverity($this->_propDict["severity"]);
                return $this->_propDict["severity"];
            }
        }
        return null;
    }

    /**
    * Sets the severity
    * Severity of the malware. Possible values are: unknown, low, moderate, high, severe.
    *
    * @param WindowsMalwareSeverity $val The severity
    *
    * @return WindowsDeviceMalwareState
    */
    public function setSeverity($val)
    {
        $this->_propDict["severity"] = $val;
        return $this;
    }

    /**
    * Gets the state
    * Current status of the malware like cleaned/quarantined/allowed etc. Possible values are: unknown, detected, cleaned, quarantined, removed, allowed, blocked, cleanFailed, quarantineFailed, removeFailed, allowFailed, abandoned, blockFailed.
    *
    * @return WindowsMalwareState|null The state
    */
    public function getState()
    {
        if (array_key_exists("state", $this->_propDict)) {
            if (is_a($this->_propDict["state"], "\Microsoft\Graph\Model\WindowsMalwareState") || is_null($this->_propDict["state"])) {
                return $this->_propDict["state"];
            } else {
                $this->_propDict["state"] = new WindowsMalwareState($this->_propDict["state"]);
                return $this->_propDict["state"];
            }
        }
        return null;
    }

    /**
    * Sets the state
    * Current status of the malware like cleaned/quarantined/allowed etc. Possible values are: unknown, detected, cleaned, quarantined, removed, allowed, blocked, cleanFailed, quarantineFailed, removeFailed, allowFailed, abandoned, blockFailed.
    *
    * @param WindowsMalwareState $val The state
    *
    * @return WindowsDeviceMalwareState
    */
    public function setState($val)
    {
        $this->_propDict["state"] = $val;
        return $this;
    }

    /**
    * Gets the threatState
    * Current status of the malware like cleaned/quarantined/allowed etc. Possible values are: active, actionFailed, manualStepsRequired, fullScanRequired, rebootRequired, remediatedWithNonCriticalFailures, quarantined, removed, cleaned, allowed, noStatusCleared.
    *
    * @return WindowsMalwareThreatState|null The threatState
    */
    public function getThreatState()
    {
        if (array_key_exists("threatState", $this->_propDict)) {
            if (is_a($this->_propDict["threatState"], "\Microsoft\Graph\Model\WindowsMalwareThreatState") || is_null($this->_propDict["threatState"])) {
                return $this->_propDict["threatState"];
            } else {
                $this->_propDict["threatState"] = new WindowsMalwareThreatState($this->_propDict["threatState"]);
                return $this->_propDict["threatState"];
            }
        }
        return null;
    }

    /**
    * Sets the threatState
    * Current status of the malware like cleaned/quarantined/allowed etc. Possible values are: active, actionFailed, manualStepsRequired, fullScanRequired, rebootRequired, remediatedWithNonCriticalFailures, quarantined, removed, cleaned, allowed, noStatusCleared.
    *
    * @param WindowsMalwareThreatState $val The threatState
    *
    * @return WindowsDeviceMalwareState
    */
    public function setThreatState($val)
    {
        $this->_propDict["threatState"] = $val;
        return $this;
    }

}
