<?php
// Helper function to safely get string value from object or return empty
$getStringValue = function($value, $default = '') {
    if (is_object($value)) {
        return '';
    }
    return $value ?? $default;
};

// Helper to check boolean/string value
$checkBool = function($value) {
    return $value === true || $value === 'true' || $value === '1';
};

// Helper to format numeric values with proper decimal separator
$formatNumber = function($value, $decimals = 2, $decimalSeparator = ',', $thousandSeparator = ' ') {
    if ($value === null || $value === '' || is_object($value)) {
        return '';
    }
    // Remove any existing formatting
    $value = str_replace([' ', ','], ['.', '.'], (string)$value);
    $value = (float)$value;
    if ($value == floor($value)) {
        // Integer - no decimal part needed
        return number_format($value, 0, $decimalSeparator, $thousandSeparator);
    }
    return number_format($value, $decimals, $decimalSeparator, $thousandSeparator);
};

// Helper to format Adresy object
$formatAdresy = function($adresy) {
    if (empty($adresy) || !is_object($adresy) || !isset($adresy->Adres)) {
        return '';
    }

    $adres = $adresy->Adres;
    if (empty($adres) || !is_object($adres)) {
        return '';
    }

    $parts = [];
    if (!empty($adres->KodPocztowy)) $parts[] = $adres->KodPocztowy;
    if (!empty($adres->Miejscowosc)) $parts[] = $adres->Miejscowosc;
    if (!empty($adres->Ulica)) $parts[] = $adres->Ulica;
    if (!empty($adres->NumerDomu)) $parts[] = 'nr ' . $adres->NumerDomu;

    return !empty($parts) ? implode(', ', $parts) : '';
};
?>
<div class="row">
    <div class="col-xs-12">
        <div class="box box-danger">
            <div class="box-header">
                <h2 class="box-title">Wniosek kadrowy</h2>
            </div>
            <div class="box-body form-horizontal">
                <?php if (!empty($wniosek)): ?>
                    <div class="form-group">
                        <label class="col-xs-12 col-md-2 control-label">Numer wniosku</label>
                        <div class="col-xs-12 col-md-10">
                            <label class="control-label"><?php echo $getStringValue($wniosek->Numer); ?></label>
                        </div>
                    </div>
<!--                    <div class="form-group">-->
<!--                        <label class="col-xs-12 col-md-2 control-label">Rodzaj wniosku</label>-->
<!--                        <div class="col-xs-12 col-md-10 pt7">-->
<!--                            --><?php //echo $getStringValue($wniosek->NazwaRodzaju); ?>
<!--                        </div>-->
<!--                    </div>-->
                    <div class="form-group">
                        <label class="col-xs-12 col-md-2 control-label">Pracownik</label>
                        <div class="col-xs-12 col-md-10 pt7">
                            <?php echo $getStringValue($wniosek->Wnioskujacy?->NazwaWyswietlana); ?>
                            (<?php echo $getStringValue($wniosek->Wnioskujacy?->Nrewid); ?>)
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-xs-12 col-md-2 control-label">Status</label>
                        <div class="col-xs-12 col-md-10 pt7">
                            <?php
                            $status = $getStringValue($wniosek->Status, 'Nieznany');
                            $color = 'red';
                            switch ($status) {
                                case 'Zaakceptowany': $color = 'green'; break;
                                case 'Odrzucony': $color = 'red'; break;
                                case 'Oczekuje': $color = 'blue'; break;
                            }
                            ?>
                            <span class="badge bg-<?php echo $color; ?>"><?php echo $status; ?></span>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-xs-12 col-md-2 control-label">Data utworzenia</label>
                        <div class="col-xs-12 col-md-10 pt7">
                            <?php echo $getStringValue($wniosek->DataUtworzenia); ?>
                        </div>
                    </div>

                    <?php if (!empty($wniosek->Elementy->ElementWnioskuKadrowego)): ?>
                        <?php
                        // Funkcja pomocnicza do rekurencyjnego przetwarzania elementów z wielopoziomowymi grupami
                        $przetwarzajElementy = function($elementy, &$grupy, $sciezka = '') use (&$przetwarzajElementy) {
                            if (empty($elementy) || !is_array($elementy)) {
                                return;
                            }

                            foreach ($elementy as $el) {
                                if (empty($el->Gid)) {
                                    continue;
                                }

                                $rodzaj = $el->Rodzaj ?? '';
                                $nazwaGrupy = '';

                                // Jeśli element jest grupą, pobierz jej nazwę
                                if ($rodzaj === 'Grupa') {
                                    if (!empty($el->Etykieta) && is_string($el->Etykieta)) {
                                        $nazwaGrupy = $el->Etykieta;
                                    } elseif (!empty($el->EtykietaWartoscX) && is_string($el->EtykietaWartoscX)) {
                                        $nazwaGrupy = $el->EtykietaWartoscX;
                                    }

                                    // Dodaj do ścieżki dla zagnieżdźonych grup
                                    if (!empty($sciezka)) {
                                        $nazwaGrupy = $sciezka . ' > ' . $nazwaGrupy;
                                    }

                                    // Inicjuj grupę
                                    if (!isset($grupy[$nazwaGrupy])) {
                                        $grupy[$nazwaGrupy] = [];
                                    }
                                }

                                // Przetwórz zagnieżdzone elementy
                                if (!empty($el->Elementy) && !empty($el->Elementy->ElementWnioskuKadrowego)) {
                                    $podElementy = $el->Elementy->ElementWnioskuKadrowego;

                                    // Sprawdź czy podelementy zawierają grupy
                                    $czyZawieraGrupy = false;
                                    foreach ($podElementy as $pod) {
                                        if (!empty($pod->Rodzaj) && $pod->Rodzaj === 'Grupa') {
                                            $czyZawieraGrupy = true;
                                            break;
                                        }
                                    }

                                    if ($czyZawieraGrupy) {
                                        // Rekurencyjnie przetwórz zagnieżdzone grupy
                                        $przetwarzajElementy($podElementy, $grupy, $nazwaGrupy);
                                    } else {
                                        // Brak zagnieżdźonych grup - dodaj bezpośrednio do bieżącej grupy
                                        foreach ($podElementy as $pod) {
                                            if (!empty($pod->Gid)) {
                                                if (!empty($nazwaGrupy)) {
                                                    $grupy[$nazwaGrupy][] = $pod;
                                                } else {
                                                    // Brak grupy - dodaj do Pozostałe
                                                    if (!isset($grupy['Pozostałe'])) {
                                                        $grupy['Pozostałe'] = [];
                                                    }
                                                    $grupy['Pozostałe'][] = $pod;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        };

                        // Grupowanie elementów według nadrzędnych grup (wielopoziomowe zagnieżdzenie)
                        $grupyElementow = [];
                        $przetwarzajElementy(
                            $wniosek->Elementy->ElementWnioskuKadrowego,
                            $grupyElementow
                        );

                        $typMap = [
                            'Grupa' => 1,
                            'Okres' => 2,
                            'Godzina' => 3,
                            'ZakresGodzin' => 4,
                            'ZakresGodzinIGodziny' => 5,
                            'Godziny' => 6,
                            'LiczbaCalkowita' => 7,
                            'LiczbaZmiennoprzecinkowa' => 8,
                            'Tekst' => 9,
                            'TakNie' => 10,
                            'Opcje' => 11,
                            'ListaWartosci' => 12,
                            'Data' => 13,
                            'Adres' => 14,
                            'Kod' => 15,
                        ];
                        ?>

                        <?php foreach ($grupyElementow as $nazwaGrupy => $elementyWniosku): ?>
                            <?php if (!empty($elementyWniosku)): ?>
                                <?php if (!empty($nazwaGrupy)): ?>
                                    <div class="form-group">
                                        <div class="col-xs-12">
                                            <hr>
                                            <h4><?php echo $nazwaGrupy; ?></h4>
                                        </div>
                                    </div>
                                <?php endif; ?>

                                <?php foreach ($elementyWniosku as $element): ?>
                                    <?php
                                    $rodzaj = $element->Rodzaj ?? 'Tekst';
                                    // Pomiń elementy typu 'Grupa' - już wyświetlone jako nagłówek
                                    if ($rodzaj === 'Grupa') {
                                        continue;
                                    }
                                    $nazwa = '';
                                    if (!empty($element->EtykietaWartoscX) && is_string($element->EtykietaWartoscX)) {
                                        $nazwa = $element->EtykietaWartoscX;
                                    } elseif (!empty($element->EtykietaWartoscY) && is_string($element->EtykietaWartoscY)) {
                                        $nazwa = $element->EtykietaWartoscY;
                                    } elseif (!empty($element->EtykietaWartoscZ) && is_string($element->EtykietaWartoscZ)) {
                                        $nazwa = $element->EtykietaWartoscZ;
                                    } elseif (!empty($element->Etykieta) && is_string($element->Etykieta)) {
                                        $nazwa = $element->Etykieta;
                                    }
                                    $wartoscX = $element->WartoscPHPX ?? '';
                                    $wartoscY = $element->WartoscPHPY ?? '';
                                    $wartoscZ = $element->WartoscPHPZ ?? '';

                                    $rodzajTyp = $typMap[$rodzaj] ?? 0;

                                    $displayValue = '';
                                    switch ($rodzajTyp) {
                                        case 1:
                                            // Grupa - nie wyświetlamy
                                            $displayValue = '';
                                            break;
                                        case 2:
                                            // Okres - DataOd - DataDo
                                            $displayValue = $wartoscX . ' - ' . $wartoscY;
                                            break;
                                        case 3:
                                            // Godzina
                                            $displayValue = $wartoscX;
                                            break;
                                        case 4:
                                            // ZakresGodzin
                                            $displayValue = $wartoscX . ' - ' . $wartoscY;
                                            break;
                                        case 5:
                                            // ZakresGodzinIGodziny
                                            $displayValue = $wartoscZ . ', ' . $wartoscX . ' - ' . $wartoscY;
                                            break;
                                        case 6:
                                            // Godziny
                                            $displayValue = $wartoscX;
                                            break;
                                        case 7:
                                            // LiczbaCalkowita
                                            $displayValue = $formatNumber($wartoscX, 0);
                                            break;
                                        case 8:
                                            // LiczbaZmiennoprzecinkowa
                                            $miejscPoPrzecinku = $element->MiejscPoPrzecinku ?? 2;
                                            $displayValue = $formatNumber($wartoscX, (int)$miejscPoPrzecinku);
                                            break;
                                        case 9:
                                            // Tekst
                                            $displayValue = $wartoscX;
                                            break;
                                        case 10:
                                            // TakNie
                                            $displayValue = (($wartoscX ?? '') === 'true' || $wartoscX === '1') ? 'Tak' : 'Nie';
                                            break;
                                        case 11:
                                            // Opcje
                                            $displayValue = $wartoscX;
                                            break;
                                        case 12:
                                            // ListaWartosci
                                            $displayValue = $wartoscX;
                                            break;
                                        case 13:
                                            // Data
                                            $displayValue = $wartoscX;
                                            break;
                                        case 14:
                                            // Adres - format z serwera: [GID|EMAIL|NAZWA|NAZWA_WYSWIETLANA|DATA|...]
                                            $displayValue = $wartoscX;
                                            if (!empty($wartoscX) && strpos($wartoscX, '[') === 0 && strpos($wartoscX, ']') !== false) {
                                                $adrContent = substr($wartoscX, 1, -1);
                                                $adrParts = explode('|', $adrContent);
                                                // NAZWA_WYSWIETLANA jest na pozycji 3 (indeks 3)
                                                $displayValue = $adrParts[2] ?? $wartoscX;
                                            }
                                            break;
                                        case 15:
                                            // Kod
                                            $displayValue = $wartoscX;
                                            break;
                                        default:
                                            $displayValue = $wartoscX;
                                    }
                                    ?>
                                    <div class="form-group">
                                        <label class="col-xs-12 col-md-2 control-label"><?php echo $nazwa; ?></label>
                                        <div class="col-xs-12 col-md-10 pt7">
                                            <?php echo $displayValue; ?>
                                        </div>
                                    </div>
                                <?php endforeach; ?>
                            <?php endif; ?>
                        <?php endforeach; ?>
                    <?php endif; ?>

                    <?php if (!empty($wniosek->Akceptacje)): ?>
                        <div class="form-group">
                            <label class="col-xs-12 col-md-2 control-label">Akceptacje</label>
                            <div class="col-xs-12 col-md-10 pt7">
                                <?php echo $formatAdresy($wniosek->Akceptacje); ?>
                            </div>
                        </div>
                    <?php endif; ?>

                <?php else: ?>
                    <div class="alert alert-warning">
                        <p>Nie można pobrać danych wniosku.</p>
                    </div>
                <?php endif; ?>

                <div class="form-group">
                    <label class="col-xs-12 col-md-2 control-label">&nbsp;</label>
                    <div class="col-xs-12 col-md-10">
                        <a data-menu-action="wnioskiKadrowe" class="btn btn-default btn-flat" href="/wnioskiKadrowe">Powrót</a>
                        <?php if($checkBool($wniosek->CzyAktualnyUserMozeDrukowac)): ?>
                            <a target="_blank" class="btn btn-primary btn-flat" href="drukujWniosekKadrowy/<?php echo $wniosek->Gid ?? ''; ?>/<?php echo urlencode($wniosek->NazwaRodzaju ?? ''); ?>">
                                <i class="fa fa-print"></i> Drukuj
                            </a>
                        <?php endif; ?>
                        <?php if($checkBool($wniosek->CzyAktualnyUserMozeEdytowac)): ?>
                            <a data-menu-action="edytujWniosekKadrowy/<?php echo $wniosek->Gid ?? ''; ?>" class="btn btn-primary btn-flat" href="/edytujWniosekKadrowy/<?php echo $wniosek->Gid ?? ''; ?>">
                                <i class="fa fa-pencil"></i> Edytuj
                            </a>
                        <?php endif; ?>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<?php echo $this->element('alert_close'); ?>

<script>
    $(function(){
        // Handle data-menu-action clicks within the modal
        $('#modal-wniosek-kadrowy-info [data-menu-action]').click(function(e) {
            e.preventDefault();

            // Close modal first
            $('#modal-wniosek-kadrowy-info').modal('hide');
            $('body').removeClass('modal-open');
            $('.modal-backdrop').remove();

            // Handle sidebar highlighting if in main context
            var sidebar = $(this).closest('.sidebar');
            if (sidebar.length) {
                sidebar.find('li.active:not(.treeview)').removeClass('active');
                $(this).parents('li').addClass('active');
            }

            var url = $(this).data('menu-action');
            localStorage.setItem('menu_action', url);

            loadAjaxView(url);
        });
    });
</script>
