<?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\StavEmisnejKontrolyEnum;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\PocetKontrolPodlaDruhu;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\PocetKontrolPodlaStavu;
use Seka\Portal\Modul\Statistiky\Entities\Zaznam\ValueObjects\ZoznamPoctuKontrolPodlaStavu;
use Seka\Portal\Modul\Statistiky\Tests\TestCase;

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

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

    /**
     *
     */
    public function testAddInstanciePoctuKontrol()
    {
        $zoznam = new ZoznamPoctuKontrolPodlaStavu();

        $zoznam->add(new PocetKontrolPodlaStavu(
            StavEmisnejKontrolyEnum::ARCHIV,
            11
        ));

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

    /**
     *
     */
    public function testAddInstancieInejTriedyPoctuKontrol()
    {
        $zoznam = new ZoznamPoctuKontrolPodlaStavu();

        self::expectException(InvalidArgumentException::class);

        $zoznam->add(new PocetKontrolPodlaDruhu(
            DruhEmisnejKontrolyEnum::ADMINISTRATIVNA_MIMO_LEHOTY,
            9
        ));
    }

    /**
     *
     */
    public function testAddRoznehoStavuKontroly()
    {
        $zoznam = new ZoznamPoctuKontrolPodlaStavu();

        for ($a = 0; $a < 3; ++$a) {
            $pocetKontrolPodlaStavu = new PocetKontrolPodlaStavu(
                StavEmisnejKontrolyEnum::ARCHIV,
                33
            );

            $zoznam->add($pocetKontrolPodlaStavu);
        }

        self::assertCount(1, $zoznam);

        for ($a = 0; $a < 3; ++$a) {
            $pocetKontrolPodlaStavu = new PocetKontrolPodlaStavu(
                StavEmisnejKontrolyEnum::STORNO,
                3
            );

            $zoznam->add($pocetKontrolPodlaStavu);
        }

        self::assertCount(2, $zoznam);

        for ($a = 0; $a < 3; ++$a) {
            $pocetKontrolPodlaStavu = new PocetKontrolPodlaStavu(
                StavEmisnejKontrolyEnum::MERANIE,
                3
            );

            $zoznam->add($pocetKontrolPodlaStavu);
        }

        self::assertCount(3, $zoznam);

        for ($a = 0; $a < 3; ++$a) {
            $pocetKontrolPodlaStavu = new PocetKontrolPodlaStavu(
                StavEmisnejKontrolyEnum::PREVZATIE,
                3
            );

            $zoznam->add($pocetKontrolPodlaStavu);
        }

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