<?php

declare(strict_types=1);

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

use InvalidArgumentException;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\Enums\DruhEmisnejKontrolyEnum;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\Enums\DruhPalivaEnum;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\Enums\EmisnySystemEnum;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\PocetKontrolPodlaDruhu;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\PocetKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla;
use Seka\Portal\Modul\Statistiky\Tests\TestCase;

/**
 * Class ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidlaTest
 *
 * @package Seka\Portal\Modul\Statistiky\Tests\Unit\Entities\Zaznam\ValueObjects
 */
class ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidlaTest extends TestCase
{
    /**
     *
     */
    public function testInstance()
    {
        $zoznam = new ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla();

        self::assertInstanceOf(ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla::class, $zoznam);
    }

    /**
     *
     */
    public function testAddInstanciaInejTriedy()
    {
        $zoznam = new ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla();

        self::expectException(InvalidArgumentException::class);

        $zoznam->add(new PocetKontrolPodlaDruhu(
            DruhEmisnejKontrolyEnum::PRAVIDELNA(),
            11
        ));
    }

    /**
     *
     */
    public function testAddRovnakyDruhPalivaAEmisnehoSystemu()
    {
        $zoznam = new ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla();

        for ($a = 0; $a < 5; ++$a) {
            $pocetKontrol = new PocetKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla(
                DruhPalivaEnum::B(),
                EmisnySystemEnum::RKAT_OBD(),
                11
            );

            $zoznam->add($pocetKontrol);
        }

        self::assertCount(1, $zoznam);
    }

    /**
     *
     */
    public function testAddRoznyDruhPalivaAEmisnehoSystemu()
    {
        $count = 3;
        $zoznam = new ZoznamPoctuKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla();

        for ($a = 0; $a < $count; ++$a) {
            $pocetKontrolPodlaDruhuAHodnotenia = new PocetKontrolPodlaDruhuPalivaAEmisnehoSystemuVozidla(
                DruhPalivaEnum::from(DruhPalivaEnum::toValues()[$a]),
                EmisnySystemEnum::from(EmisnySystemEnum::toValues()[$a]),
                rand(1, 253)
            );

            $zoznam->add($pocetKontrolPodlaDruhuAHodnotenia);
        }

        self::assertCount($count, $zoznam);
    }
}
