<?php

declare(strict_types=1);

use Illuminate\Database\Seeder;
use Seka\Vzdelavanie\Enums\ModelStatusEnum;
use Seka\Vzdelavanie\Models\Testovanie\Test;
use Seka\Vzdelavanie\Models\Testovanie\Otazka;
use Seka\Vzdelavanie\Models\Testovanie\Odpoved;
use Seka\Vzdelavanie\Models\Testovanie\HodnotenieOdpovedeEnum;

/**
 * Class VzdelavanieTestovanieDatabaseSeeder
 */
class VzdelavanieTestovanieDatabaseSeeder extends Seeder
{
    public function run()
    {
        collect([
            'Legislatíva',
            'Metodika',
            'Konštrukcia',
            'Meracie zariadenia',
            'Plyn',
            'Príklady',
        ])->each(function ($nazovTestu) {
            $test = factory(Test::class)->create([
                'nazov' => $nazovTestu,
                'stav' => ModelStatusEnum::PUBLIKOVANE(),
            ]);

            factory(Otazka::class, rand($test->pocet_otazok, $test->pocet_otazok + 10))->make()->each(function (Otazka $otazka) use ($test) {
                $otazka->test()->associate($test);
                $otazka->save();

                factory(Odpoved::class, rand(5, 8))->make()->each(function (Odpoved $odpoved) use ($otazka) {
                    $odpoved->otazka()->associate($otazka);
                    // vsetky odpovede budu nastavene ako nespravne, neskor sa jedna nastavi ako spravna
                    $odpoved->setAttribute('hodnotenie', HodnotenieOdpovedeEnum::NESPRAVNA());
                    $odpoved->save();
                });

                // nastavenie jednej odpovede ako spravnej
                $otazka->odpovede()->inRandomOrder()->first()->setAttribute('hodnotenie', HodnotenieOdpovedeEnum::SPRAVNA())->save();
            });
        });
    }
}
