<?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 UdajePreTypZaznamuPouzivatel
 *
 * @package Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects
 */
final class UdajePreTypZaznamuPouzivatel implements Udaje, Arrayable, Jsonable, JsonSerializable
{
    /**
     * @var \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolSObratom
     */
    private ZoznamPoctuKontrolSObratom $zoznamPoctuKontrolSObratom;

    /**
     * @var \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhu
     */
    private ZoznamPoctuKontrolPodlaDruhu $zoznamPoctuKontrolPodlaDruhu;

    /**
     * @var \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaStavu
     */
    private ZoznamPoctuKontrolPodlaStavu $zoznamPoctuKontrolPodlaStavu;

    /**
     * @var \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaHodnotenia
     */
    private ZoznamPoctuKontrolPodlaHodnotenia $zoznamPoctuKontrolPodlaHodnotenia;

    /**
     * @var \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaKategorieVozidla
     */
    private ZoznamPoctuKontrolPodlaKategorieVozidla $zoznamPoctuKontrolPodlaKategorieVozidla;

    /**
     * @var \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla
     */
    private ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla $zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla;

    /**
     * UdajeCast constructor.
     *
     * @param \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolSObratom                                $zoznamPoctuKontrolSObratom
     * @param \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhu                              $zoznamPoctuKontrolPodlaDruhu
     * @param \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaStavu                              $zoznamPoctuKontrolPodlaStavu
     * @param \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaHodnotenia                         $zoznamPoctuKontrolPodlaHodnotenia
     * @param \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaKategorieVozidla                   $zoznamPoctuKontrolPodlaKategorieVozidla
     * @param \Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla $zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla
     */
    public function __construct(
        ZoznamPoctuKontrolSObratom                                $zoznamPoctuKontrolSObratom,
        ZoznamPoctuKontrolPodlaDruhu                              $zoznamPoctuKontrolPodlaDruhu,
        ZoznamPoctuKontrolPodlaStavu                              $zoznamPoctuKontrolPodlaStavu,
        ZoznamPoctuKontrolPodlaHodnotenia                         $zoznamPoctuKontrolPodlaHodnotenia,
        ZoznamPoctuKontrolPodlaKategorieVozidla                   $zoznamPoctuKontrolPodlaKategorieVozidla,
        ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla $zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla
    )
    {
        $this->zoznamPoctuKontrolSObratom = $zoznamPoctuKontrolSObratom;
        $this->zoznamPoctuKontrolPodlaDruhu = $zoznamPoctuKontrolPodlaDruhu;
        $this->zoznamPoctuKontrolPodlaStavu = $zoznamPoctuKontrolPodlaStavu;
        $this->zoznamPoctuKontrolPodlaHodnotenia = $zoznamPoctuKontrolPodlaHodnotenia;
        $this->zoznamPoctuKontrolPodlaKategorieVozidla = $zoznamPoctuKontrolPodlaKategorieVozidla;
        $this->zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla = $zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla;
    }

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

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

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

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

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

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

    /**
     * @return array
     */
    public function toArray(): array
    {
        return [
            'zoznamPoctuKontrolSObratom' => $this->zoznamPoctuKontrolSObratom,
            'zoznamPoctuKontrolPodlaDruhu' => $this->zoznamPoctuKontrolPodlaDruhu,
            'zoznamPoctuKontrolPodlaStavu' => $this->zoznamPoctuKontrolPodlaStavu,
            'zoznamPoctuKontrolPodlaHodnotenia' => $this->zoznamPoctuKontrolPodlaHodnotenia,
            'zoznamPoctuKontrolPodlaKategorieVozidla' => $this->zoznamPoctuKontrolPodlaKategorieVozidla,
            'zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla' => $this->zoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla,
        ];
    }

    /**
     * @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();
    }
}
