<?php

// SPDX-FileCopyrightText: 2021 Icinga GmbH <https://icinga.com>
// SPDX-License-Identifier: GPL-3.0-or-later

namespace Icinga\Module\Icingadb\Command\Object;

/**
 * Submit a passive check result for a host or service
 */
class ProcessCheckResultCommand extends ObjectsCommand
{
    /**
     * Host up
     */
    public const HOST_UP = 0;

    /**
     * Host down
     */
    public const HOST_DOWN = 1;

    /**
     * Service ok
     */
    public const SERVICE_OK = 0;

    /**
     * Service warning
     */
    public const SERVICE_WARNING = 1;

    /**
     * Service critical
     */
    public const SERVICE_CRITICAL = 2;

    /**
     * Service unknown
     */
    public const SERVICE_UNKNOWN = 3;

    /**
     * Status code of the host or service check result
     *
     * @var int
     */
    protected $status;

    /**
     * Text output of the host or service check result
     *
     * @var string
     */
    protected $output;

    /**
     * Optional performance data of the host or service check result
     *
     * @var string
     */
    protected $performanceData;

    /**
     * Set the status code of the host or service check result
     *
     * @param   int $status
     *
     * @return  $this
     */
    public function setStatus(int $status): self
    {
        $this->status = $status;

        return $this;
    }

    /**
     * Get the status code of the host or service check result
     *
     * @return int
     */
    public function getStatus(): int
    {
        if ($this->status === null) {
            throw new \LogicException(
                'You are accessing an unset property. Please make sure to set it beforehand.'
            );
        }

        return $this->status;
    }

    /**
     * Set the text output of the host or service check result
     *
     * @param   string $output
     *
     * @return  $this
     */
    public function setOutput(string $output): self
    {
        $this->output = $output;

        return $this;
    }

    /**
     * Get the text output of the host or service check result
     *
     * @return ?string
     */
    public function getOutput()
    {
        return $this->output;
    }

    /**
     * Set the performance data of the host or service check result
     *
     * @param ?string $performanceData
     *
     * @return $this
     */
    public function setPerformanceData(?string $performanceData = null): self
    {
        $this->performanceData = $performanceData;

        return $this;
    }

    /**
     * Get the performance data of the host or service check result
     *
     * @return ?string
     */
    public function getPerformanceData()
    {
        return $this->performanceData;
    }
}
