<?php

declare(strict_types=1);

namespace Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects;

use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Contracts\Support\Jsonable;
use JsonSerializable;

/**
 * Class UdajePreTypZaznamuPracovisko
 *
 * @package Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects
 */
final class UdajePreTypZaznamuPracovisko implements Udaje, Arrayable, Jsonable, JsonSerializable
{
    /**
     * @var \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhuAHodnotenia
     */
    private ZoznamPoctuKontrolPodlaDruhuAHodnotenia $zoznamPoctuKontrolPodlaDruhuAHodnotenia;
    /**
     * @var \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaKategorieVozidla
     */
    private ZoznamPoctuKontrolPodlaKategorieVozidla $zoznamPoctuKontrolPodlaKategorieVozidla;
    /**
     * @var \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolAObratuPodlaSubjektuFakturacie|null
     */
    private ?ZoznamPoctuKontrolAObratuPodlaSubjektuFakturacie $zoznamPoctuKontrolAObratuPodlaSubjektuFakturacie;
    /**
     * @var \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla
     */
    private ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla $zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla;
    /**
     * @var \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaStavu
     */
    private ZoznamPoctuKontrolPodlaStavu $zoznamPoctuKontrolPodlaStavu;

    /**
     * UdajePreTypZaznamuPracovisko constructor.
     *
     * @param \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhuAHodnotenia                   $zoznamPoctuKontrolPodlaDruhuAHodnotenia
     * @param \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaKategorieVozidla                   $zoznamPoctuKontrolPodlaKategorieVozidla
     * @param \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla $zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla
     * @param \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolAObratuPodlaSubjektuFakturacie|null     $zoznamPoctuKontrolAObratuPodlaSubjektuFakturacie
     * @param \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaStavu                              $zoznamPoctuKontrolPodlaStavu
     */
    public function __construct(
        ZoznamPoctuKontrolPodlaDruhuAHodnotenia                   $zoznamPoctuKontrolPodlaDruhuAHodnotenia,
        ZoznamPoctuKontrolPodlaKategorieVozidla                   $zoznamPoctuKontrolPodlaKategorieVozidla,
        ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla $zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla,
        ?ZoznamPoctuKontrolAObratuPodlaSubjektuFakturacie         $zoznamPoctuKontrolAObratuPodlaSubjektuFakturacie,
        ZoznamPoctuKontrolPodlaStavu                              $zoznamPoctuKontrolPodlaStavu
    )
    {
        $this->zoznamPoctuKontrolPodlaDruhuAHodnotenia = $zoznamPoctuKontrolPodlaDruhuAHodnotenia;
        $this->zoznamPoctuKontrolPodlaKategorieVozidla = $zoznamPoctuKontrolPodlaKategorieVozidla;
        $this->zoznamPoctuKontrolAObratuPodlaSubjektuFakturacie = $zoznamPoctuKontrolAObratuPodlaSubjektuFakturacie;
        $this->zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla = $zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla;
        $this->zoznamPoctuKontrolPodlaStavu = $zoznamPoctuKontrolPodlaStavu;
    }

    /**
     * @return \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhuAHodnotenia
     */
    public function zoznamPoctuKontrolPodlaDruhuAHodnotenia(): ZoznamPoctuKontrolPodlaDruhuAHodnotenia
    {
        return $this->zoznamPoctuKontrolPodlaDruhuAHodnotenia;
    }

    /**
     * @return \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaKategorieVozidla
     */
    public function zoznamPoctuKontrolPodlaKategorieVozidla(): ZoznamPoctuKontrolPodlaKategorieVozidla
    {
        return $this->zoznamPoctuKontrolPodlaKategorieVozidla;
    }

    /**
     * @return \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolAObratuPodlaSubjektuFakturacie|null
     */
    public function zoznamPoctuKontrolAObratuPodlaSubjektuFakturacie(): ?ZoznamPoctuKontrolAObratuPodlaSubjektuFakturacie
    {
        return $this->zoznamPoctuKontrolAObratuPodlaSubjektuFakturacie;
    }

    /**
     * @return \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla
     */
    public function zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla(): ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla
    {
        return $this->zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla;
    }

    /**
     * @return \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaStavu
     */
    public function zoznamPoctuKontrolPodlaStavu(): ZoznamPoctuKontrolPodlaStavu
    {
        return $this->zoznamPoctuKontrolPodlaStavu;
    }

    /**
     * @return array
     */
    public function toArray(): array
    {
        return [
            'zoznamPoctuKontrolPodlaStavu' => $this->zoznamPoctuKontrolPodlaStavu->toArray(),
            'zoznamPoctuKontrolPodlaDruhuAHodnotenia' => $this->zoznamPoctuKontrolPodlaDruhuAHodnotenia->toArray(),
            'zoznamPoctuKontrolPodlaKategorieVozidla' => $this->zoznamPoctuKontrolPodlaKategorieVozidla->toArray(),
            'zoznamPoctuKontrolAObratuPodlaSubjektuFakturacie' => is_null($this->zoznamPoctuKontrolAObratuPodlaSubjektuFakturacie) ? null : $this->zoznamPoctuKontrolAObratuPodlaSubjektuFakturacie->toArray(),
            'zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla' => $this->zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla->toArray(),
        ];
    }

    /**
     * @param int $options
     *
     * @return false|string
     */
    public function toJson($options = 0): bool|string
    {
        return json_encode($this->toArray(), $options);
    }

    /**
     * @return false|string
     */
    public function jsonSerialize(): bool|string
    {
        return $this->toJson();
    }
}
