<?php

use Diglactic\Breadcrumbs\Breadcrumbs;
use Diglactic\Breadcrumbs\Exceptions\DuplicateBreadcrumbException;
use Illuminate\Contracts\Container\BindingResolutionException;
use Seka\Vzdelavanie\Models\Kniznica\Kategoria;
use Seka\Vzdelavanie\Models\Kniznica\Sekcia;
use Seka\Vzdelavanie\Models\Kniznica\Ucebnica;
use Seka\Vzdelavanie\Services\KategoriaServiceInterface as KategoriaService;
use Seka\Vzdelavanie\Services\SekciaService;
use Seka\Vzdelavanie\Services\UcebnicaServiceInterface as UcebnicaService;

try {
    $sekciaService = app(SekciaService::class);
    $ucebnicaService = app(UcebnicaService::class);
    $kategoriaService = app(KategoriaService::class);
} catch (BindingResolutionException $e) {
    Log::error($e);
}

try {
// Vzdelavanie > Kniznica
    Breadcrumbs::for('vzdelavanie.kniznica.index', function ($trail) {
        $trail->parent('vzdelavanie.index');
        $trail->push('Knižnica', route('vzdelavanie.kniznica.index'));
    });

// Vzdelavanie > Kniznica > [Kategoria]
    Breadcrumbs::for(
        'vzdelavanie.kniznica.kategoria.ucebnice.index',
        function ($trail, $vzdKnzncKategoriaId) use ($kategoriaService) {
            /** @var Kategoria $kategoria */
            $kategoria = $kategoriaService->vratPodlaId($vzdKnzncKategoriaId);
            $trail->parent('vzdelavanie.kniznica.index');
            $trail->push($kategoria->nazov, route('vzdelavanie.kniznica.kategoria.ucebnice.index', $kategoria));
        },
    );

// Vzdelavanie > Kniznica > [Kategoria] > [Ucebny material]
    Breadcrumbs::for(
        'vzdelavanie.kniznica.ucebnica.show',
        function ($trail, $vzdKnzncUcbnMtrlId) use ($ucebnicaService) {
            /** @var Ucebnica $ucebnica */
            $ucebnica = $ucebnicaService->vratUcebnyText($vzdKnzncUcbnMtrlId);
            $trail->parent('vzdelavanie.kniznica.kategoria.ucebnice.index', $ucebnica->kategoria->id);
            $trail->push($ucebnica->nazov, route('vzdelavanie.kniznica.ucebnica.show', $ucebnica));
        },
    );

// Vzdelavanie > Kniznica > [Kategoria] > [Ucebny material] > [Sekcia]
    Breadcrumbs::for(
        'vzdelavanie.kniznica.ucebnica.sekcia.index',
        function ($trail, $vzdKnzncUcbnMtrlId) use ($ucebnicaService) {
            /** @var Ucebnica $ucebnica */
            $ucebnica = $ucebnicaService->vratUcebnyText($vzdKnzncUcbnMtrlId);

            $trail->parent('vzdelavanie.kniznica.ucebnica.show', $ucebnica->id);
        },
    );

// Vzdelavanie > Kniznica > [Kategoria] > [Ucebny material] > [Sekcia]
    Breadcrumbs::for(
        'vzdelavanie.kniznica.ucebnica.sekcia.show',
        function ($trail, $vzdKnzncUcbnMtrlId, $vzdKnzncSekciaId) use ($ucebnicaService, $sekciaService) {
            /** @var Ucebnica $ucebnica */
            $ucebnica = $ucebnicaService->vratUcebnyText($vzdKnzncUcbnMtrlId);
            /** @var Sekcia $sekcia */
            $sekcia = $sekciaService->vratSekciu($vzdKnzncSekciaId);
            $trail->parent('vzdelavanie.kniznica.ucebnica.show', $ucebnica->id);

            foreach ($sekcia->ancestors()->orderBy('_lft')->get() as $ancestor) {
                $trail->push(
                    $ancestor->nazov,
                    route('vzdelavanie.kniznica.ucebnica.sekcia.show', [$ucebnica, $ancestor]),
                );
            }

            $trail->push($sekcia->nazov);
        },
    );
} catch (DuplicateBreadcrumbException $e) {
    Log::error($e);
}
