<?php

use Diglactic\Breadcrumbs\Breadcrumbs;
use Diglactic\Breadcrumbs\Exceptions\DuplicateBreadcrumbException;
use Illuminate\Support\Str;
use Seka\Portal\Modul\Vzdelavanie\Models\Testovanie\Odpoved;
use Seka\Portal\Modul\Vzdelavanie\Models\Testovanie\Otazka;
use Seka\Portal\Modul\Vzdelavanie\Models\Testovanie\Test;

try {
// Vzdelavanie > Sprava > Testovanie
    Breadcrumbs::for('vzdelavanie.sprava.testovanie.index', function ($trail) {
        $trail->parent('vzdelavanie.sprava.index');
        $trail->push('Testovanie', route('vzdelavanie.sprava.testovanie.index'));
    });

// Vzdelavanie > Sprava > Testovanie > Testy
    Breadcrumbs::for('vzdelavanie.sprava.testovanie.testy.index', function ($trail) {
        $trail->parent('vzdelavanie.sprava.testovanie.index');
        $trail->push('Testy', route('vzdelavanie.sprava.testovanie.testy.index'));
    });

// Vzdelavanie > Sprava > Testovanie > Testy > Novy
    Breadcrumbs::for('vzdelavanie.sprava.testovanie.testy.create', function ($trail) {
        $trail->parent('vzdelavanie.sprava.testovanie.testy.index');
        $trail->push('Nový test');
    });

// Vzdelavanie > Sprava > Testovanie > Testy > [Test]
    Breadcrumbs::for('vzdelavanie.sprava.testovanie.testy.edit', function ($trail, $vzdTstTstId) {
        $test = Test::query()->findOrFail($vzdTstTstId);
        $trail->parent('vzdelavanie.sprava.testovanie.testy.index');
        $trail->push(Str::limit($test->nazov, 20), route('vzdelavanie.sprava.testovanie.testy.edit', $test));
    });

// Vzdelavanie > Sprava > Testovanie > Testy > [Test]
    Breadcrumbs::for('vzdelavanie.sprava.testovanie.testy.update', function ($trail, $vzdTstTstId) {
        $test = Test::query()->findOrFail($vzdTstTstId);
        $trail->parent('vzdelavanie.sprava.testovanie.testy.index');
        $trail->push(Str::limit($test->nazov, 20), route('vzdelavanie.sprava.testovanie.testy.edit', $test));
    });

// Vzdelavanie > Sprava > Testovanie > Testy > [Test] > Otazky
    Breadcrumbs::for('vzdelavanie.sprava.testovanie.testy.otazky.index', function ($trail, $vzdTstTstId) {
        $test = Test::query()->findOrFail($vzdTstTstId);
        $trail->parent('vzdelavanie.sprava.testovanie.testy.edit', $test->id);
        $trail->push('Otázky', route('vzdelavanie.sprava.testovanie.testy.otazky.index', $test));
    });

// Vzdelavanie > Sprava > Testovanie > Testy > [Test] > Otazky > Nova
    Breadcrumbs::for('vzdelavanie.sprava.testovanie.testy.otazky.create', function ($trail, $vzdTstTstId) {
        $test = Test::query()->findOrFail($vzdTstTstId);
        $trail->parent('vzdelavanie.sprava.testovanie.testy.otazky.index', $test->id);
        $trail->push('Nová otázka');
    });

// Vzdelavanie > Sprava > Testovanie > Testy > [Test] > Otazky > [Otazka]
    Breadcrumbs::for('vzdelavanie.sprava.testovanie.testy.otazky.edit', function ($trail, $vzdTstTstId, $vzdTstOtzkId) {
        $test = Test::query()->findOrFail($vzdTstTstId);
        $otazka = Otazka::query()->findOrFail($vzdTstOtzkId);
        $trail->parent('vzdelavanie.sprava.testovanie.testy.otazky.index', $test->id);
        $trail->push(
            Str::limit($otazka->znenie, 20),
            route('vzdelavanie.sprava.testovanie.testy.otazky.edit', [$test, $otazka]),
        );
    });

// Vzdelavanie > Sprava > Testovanie > Testy > [Test] > Otazky > [Otazka]
    Breadcrumbs::for(
        'vzdelavanie.sprava.testovanie.testy.otazky.update',
        function ($trail, $vzdTstTstId, $vzdTstOtzkId) {
            $test = Test::query()->findOrFail($vzdTstTstId);
            $otazka = Otazka::query()->findOrFail($vzdTstOtzkId);
            $trail->parent('vzdelavanie.sprava.testovanie.testy.otazky.index', $test->id);
            $trail->push(
                Str::limit($otazka->znenie, 20),
                route('vzdelavanie.sprava.testovanie.testy.otazky.edit', [$test, $otazka]),
            );
        },
    );

// Vzdelavanie > Sprava > Testovanie > Testy > [Test] > Otazky > [Otazka] > Odpovede
    Breadcrumbs::for(
        'vzdelavanie.sprava.testovanie.testy.otazky.odpovede.index',
        function ($trail, $vzdTstTstId, $vzdTstOtzkId) {
            $test = Test::query()->findOrFail($vzdTstTstId);
            $otazka = Otazka::query()->findOrFail($vzdTstOtzkId);
            $trail->parent('vzdelavanie.sprava.testovanie.testy.otazky.edit', $test->id, $otazka->id);
            $trail->push(
                'Odpovede',
                route('vzdelavanie.sprava.testovanie.testy.otazky.odpovede.index', [$test, $otazka]),
            );
        },
    );

// Vzdelavanie > Sprava > Testovanie > Testy > [Test] > Otazky > [Otazka] > Odpovede > Nova
    Breadcrumbs::for(
        'vzdelavanie.sprava.testovanie.testy.otazky.odpovede.create',
        function ($trail, $vzdTstTstId, $vzdTstOtzkId) {
            $test = Test::query()->findOrFail($vzdTstTstId);
            $otazka = Otazka::query()->findOrFail($vzdTstOtzkId);
            $trail->parent('vzdelavanie.sprava.testovanie.testy.otazky.odpovede.index', $test->id, $otazka->id);
            $trail->push(
                'Nová odpoveď',
                route('vzdelavanie.sprava.testovanie.testy.otazky.odpovede.create', [$test, $otazka]),
            );
        },
    );

// Vzdelavanie > Sprava > Testovanie > Testy > [Test] > Otazky > [Otazka] > Odpovede > [Odpoved]
    Breadcrumbs::for(
        'vzdelavanie.sprava.testovanie.testy.otazky.odpovede.edit',
        function ($trail, $vzdTstTstId, $vzdTstOtzkId, $vzdTstOdpvdId) {
            $test = Test::query()->findOrFail($vzdTstTstId);
            $otazka = Otazka::query()->findOrFail($vzdTstOtzkId);
            $odpoved = Odpoved::query()->findOrFail($vzdTstOdpvdId);
            $trail->parent('vzdelavanie.sprava.testovanie.testy.otazky.odpovede.index', $test->id, $otazka->id);
            $trail->push(
                Str::limit($odpoved->znenie, 20),
                route('vzdelavanie.sprava.testovanie.testy.otazky.odpovede.edit', [$test, $otazka, $odpoved]),
            );
        },
    );


// Vzdelavanie > Sprava > Testovanie > Studenti
    Breadcrumbs::for('vzdelavanie.sprava.testovanie.pouzivatelia.index', function ($trail) {
        $trail->parent('vzdelavanie.sprava.testovanie.index');
        $trail->push('Testy študentov', route('vzdelavanie.sprava.testovanie.pouzivatelia.index'));
    });
} catch (DuplicateBreadcrumbException $e) {
    Log::error($e);
}
