<?php

declare(strict_types=1);

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Seka\Vzdelavanie\Models\Kniznica\Kategoria;
use Seka\Vzdelavanie\Models\Kniznica\Sekcia;
use Seka\Vzdelavanie\Models\Kniznica\Ucebnica;

/**
 * Class VzdelavanieKniznicaDatabaseSeeder
 *
 * @package Database\Seeders
 */
class VzdelavanieKniznicaDatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run(): void
    {
        collect([
            [
                'nazov' => 'Metodika',
                'obrazok' => 'fab fa-readme text-blue',
            ],
            [
                'nazov' => 'Legislatíva',
                'obrazok' => 'fa-balance-scale text-red',
            ],
            [
                'nazov' => 'Odborné vedomosti',
                'obrazok' => 'fa-brain text-orange',
            ],
            [
                'nazov' => 'Odborná literatúra',
                'obrazok' => 'fa-book-reader text-teal',
            ],
        ])->each(function ($kategoria) {
            Kategoria::factory()->create($kategoria)->each(function (Kategoria $kategoria) {
                Ucebnica::factory()->count(rand(5, 10))->make()->each(function (Ucebnica $ucebnica) use ($kategoria) {
                    $ucebnica->kategoria()->associate($kategoria);
                    $ucebnica->save();

                    Sekcia::factory()->count(rand(5, 10))->make()->each(function (Sekcia $sekcia) use ($ucebnica) {
                        $sekcia->ucebnica()->associate($ucebnica);
                        $sekcia->saveAsRoot();
                        $sekcia = $sekcia->fresh();

                        Sekcia::factory()->count(rand(3, 7))->make()->each(
                            function (Sekcia $podSekcia) use ($ucebnica, $sekcia) {
                                $podSekcia->ucebnica()->associate($ucebnica);
                                $sekcia->appendNode($podSekcia);
                                $podSekcia->save();
                            },
                        );
                    });
                });
            });
        });
    }
}
