<div class="row" data-form="edytuj_wniosek_kadrowy">
    <div class="col-xs-12">
        <div class="box box-danger">
            <style>
                .input-narrow {
                    max-width: 200px;
                }

                .input-narrow.text-right {
                    text-align: right;
                }

                .grupa-naglowek {
                    cursor: default;
                }

                .grupa-naglowek[data-czy-rozwijana="1"] {
                    cursor: pointer;
                }

                .group-collapsed .group-toggle-icon {
                    transform: rotate(-90deg);
                    transition: transform 0.2s ease;
                }

                .group-toggle-icon {
                    transition: transform 0.2s ease;
                    color: #cc0000;
                }

                .grupa-naglowek[data-czy-rozwijana="1"]:hover .group-toggle-icon {
                    color: #a00000;
                }

                .grupa-naglowek.group-collapsed + .form-group:not(.grupa-naglowek) {
                    display: none;
                }
            </style>
            <?php echo $this->Form->create(null, ['templates' => ['submitContainer' => '{{content}}',], 'id' => 'pWniosekKadrowyEdytujForm', 'name' => 'pWniosekKadrowyEdytujForm', 'class' => 'form-horizontal', 'type' => 'file']); ?>
            <div class="box-body">
                <?php if (!empty($wniosek)): ?>
                    <input type="hidden" name="Gid" value="<?php echo $gid ?? ''; ?>">
                    <input type="hidden" name="GidRodzaju" value="<?php echo $wniosek->GidRodzaju ?? ''; ?>">
                    <input type="hidden" name="Edycja" value="1">
                    <input type="hidden" name="Numer" value="<?php echo $wniosek->Numer ?? ''; ?>">
                    <input type="hidden" name="nowyWniosekBase64"
                           value="<?php echo base64_encode(json_encode($wniosek)); ?>">

                    <!-- Większy tytuł rodzaju wniosku -->
                    <div class="row">
                        <div class="col-xs-12">
                            <h2 class="text-center text-danger" style="margin-bottom: 20px;">
                                <?php echo $wniosek->NazwaRodzaju ?? ''; ?>
                            </h2>
                        </div>
                    </div>

                    <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">
                            <p class="form-control-static"><?php echo $wniosek->Numer ?? ''; ?></p>
                        </div>
                    </div>

                    <!-- Rodzaj wniosku jako ukryte pole (już wyświetlony jako tytuł powyżej) -->
                    <input type="hidden" name="RodzajWnioskuGid"
                           value="<?php echo $wniosek->RodzajWnioskuGid ?? ''; ?>">

                    <div class="form-group">
                        <label class="col-xs-12 col-md-2 control-label">Pracownik</label>
                        <div class="col-xs-12 col-md-10">
                            <p class="form-control-static"><?php echo $wniosek->PracownikNazwiskoImie ?? ''; ?></p>
                        </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">
                            <p class="form-control-static">
                                <?php
                                $status = $wniosek->Status ?? 'Nieznany';
                                $color = 'label-default';
                                switch ($status) {
                                    case 'Zaakceptowany':
                                        $color = 'label-success';
                                        break;
                                    case 'Odrzucony':
                                        $color = 'label-danger';
                                        break;
                                    case 'Oczekuje':
                                        $color = 'label-info';
                                        break;
                                }
                                ?>
                                <span class="label <?php echo $color; ?>"><?php echo $status; ?></span>
                            </p>
                        </div>
                    </div>

                    <?php if (!empty($wniosek->Elementy) && !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 ?? '';
                                $sciezkaBiezacejGrupy = $sciezka; // Zachowaj sciezka rodzica na tym poziomie

                                // Jeśli element jest grupą, pobierz jej nazwę i zbuduj sciezka dla tej grupy
                                if ($rodzaj === 'Grupa') {
                                    // Pobierz Etykieta (do wyświetlania)
                                    $etykietaDoWyswietlania = '';
                                    if (!empty($el->Etykieta) && is_string($el->Etykieta)) {
                                        $etykietaDoWyswietlania = $el->Etykieta;
                                    } elseif (!empty($el->EtykietaWartoscX) && is_string($el->EtykietaWartoscX)) {
                                        $etykietaDoWyswietlania = $el->EtykietaWartoscX;
                                    }

                                    // Użyj Nazwa (lub GID) dla unikalności gdy etykiety się powtarzają
                                    $unikalnaNazwa = !empty($el->Nazwa) ? $el->Nazwa : $el->Gid;

                                    // Zbuduj pelnaSciezka dla tej grupy (do przekazania dzieciom)
                                    $pelnaSciezka = !empty($sciezka) ? $sciezka . ' > ' . $unikalnaNazwa : $unikalnaNazwa;

                                    // Inicjuj grupę pod tą ścieżką z etykietą do wyświetlania
                                    if (!isset($grupy[$pelnaSciezka])) {
                                        $grupy[$pelnaSciezka] = [
                                            'etykieta' => $etykietaDoWyswietlania,
                                            'elementy' => [],
                                            'czyRozwijana' => !empty($el->CzyGrupaRozwijana),
                                            'czyInicjalnieZwinieta' => !empty($el->CzyGrupaInicjalnieZwinieta)
                                        ];
                                    }

                                    // Ustaw sciezkaBiezacejGrupy na pelnaSciezka dla dzieci tej grupy
                                    $sciezkaBiezacejGrupy = $pelnaSciezka;
                                }

                                // Przetwórz zagnieżdżone 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żdżone grupy z pelnaSciezka
                                        $przetwarzajElementy($podElementy, $grupy, $sciezkaBiezacejGrupy);
                                    } else {
                                        // Brak zagnieżdżonych grup - dodaj bezpośrednio do bieżącej grupy
                                        foreach ($podElementy as $pod) {
                                            if (!empty($pod->Gid)) {
                                                if (!empty($sciezkaBiezacejGrupy)) {
                                                    $grupy[$sciezkaBiezacejGrupy]['elementy'][] = $pod;
                                                } else {
                                                    // Brak grupy - dodaj do Pozostałe
                                                    if (!isset($grupy['Pozostałe'])) {
                                                        $grupy['Pozostałe'] = [
                                                            'etykieta' => 'Pozostałe',
                                                            'elementy' => []
                                                        ];
                                                    }
                                                    $grupy['Pozostałe']['elementy'][] = $pod;
                                                }
                                            }
                                        }
                                    }
                                } else {
                                    // Elementy bez zagnieżdżonych elementów (np. MIESIAC, UZASADNIENIE)
                                    if (!empty($sciezkaBiezacejGrupy)) {
                                        $grupy[$sciezkaBiezacejGrupy]['elementy'][] = $el;
                                    } elseif (!empty($sciezka)) {
                                        $grupy[$sciezka]['elementy'][] = $el;
                                    } else {
                                        if (!isset($grupy['Pozostałe'])) {
                                            $grupy['Pozostałe'] = ['etykieta' => 'Pozostałe', 'elementy' => []];
                                        }
                                        $grupy['Pozostałe']['elementy'][] = $el;
                                    }
                                }
                            }
                        };

                        // Grupowanie elementów według nadrzędnych grup (wielopoziomowe zagnieżdżenie)
                        $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 $grupaIndex = 0; ?>
                        <?php foreach ($grupyElementow as $pelnaSciezka => $grupaData): ?>
                            <?php if (!empty($grupaData['elementy'])): ?>
                                <?php if (!empty($pelnaSciezka)): ?>
                                    <?php
                                    $isExpandable = !empty($grupaData['czyRozwijana']);
                                    $isInitiallyCollapsed = !empty($grupaData['czyInicjalnieZwinieta']);
                                    $collapsedClass = $isExpandable && $isInitiallyCollapsed ? 'group-collapsed' : '';
                                    ?>
                                    <!-- Separacja wizualna między sekcjami -->
                                    <div class="form-group grupa-naglowek <?php echo $collapsedClass; ?>"
                                         data-pelna-sciezka="<?php echo htmlspecialchars($pelnaSciezka); ?>"
                                         data-czy-rozwijana="<?php echo $isExpandable ? '1' : '0'; ?>"
                                         data-czy-inicjalnie-zwinieta="<?php echo $isInitiallyCollapsed ? '1' : '0'; ?>">
                                        <div class="col-xs-12">
                                            <?php if ($isExpandable): ?>
                                                <i class="fa fa-chevron-right group-toggle-icon"
                                                   style="cursor: pointer; margin-right: 8px;"></i>
                                            <?php endif; ?>
                                            <?php if (str_contains($pelnaSciezka, ' > ')): ?>
                                                <h4 class="box-title text-danger"
                                                    style="display: inline;"><?php echo $grupaData['etykieta']; ?></h4>
                                            <?php else: ?>
                                                <h3 class="box-title text-danger"
                                                    style="display: inline;"><?php echo $grupaData['etykieta']; ?></h3>
                                            <?php endif; ?>
                                        </div>
                                    </div>
                                <?php endif; ?>

                                <?php
                                /** @var \App\Service\Soap\DTO\ElementWnioskuKadrowego|null $element */
                                foreach ($grupaData['elementy'] as $index => $element):
                                    ?>
                                    <?php
                                    $rodzaj = $element->Rodzaj ?? 'Tekst';
                                    // Pomiń elementy typu 'Grupa' - już wyświetlone jako nagłówek
                                    if ($rodzaj === 'Grupa') {
                                        continue;
                                    }
                                    $nazwa = '';
                                    if (!empty($element->Etykieta) && is_string($element->Etykieta)) {
                                        $nazwa = $element->Etykieta;
                                    } elseif (!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;
                                    }
                                    $wartoscX = $element->WartoscPHPX ?? '';
                                    $wartoscY = $element->WartoscPHPY ?? '';
                                    $wartoscZ = $element->WartoscPHPZ ?? '';
                                    $czyWymagany = $element->CzyWymagany ?? false;
                                    $dostepneWartosci = [];
                                    if (!empty($element->DostepneWartosci)) {
                                        if (is_string($element->DostepneWartosci)) {
                                            $dostepneWartosci = explode(';', $element->DostepneWartosci);
                                        } elseif (is_object($element->DostepneWartosci) && isset($element->DostepneWartosci->string)) {
                                            // Handle object format from SOAP response
                                            $dostepneWartosci = is_array($element->DostepneWartosci->string)
                                                ? $element->DostepneWartosci->string
                                                : [$element->DostepneWartosci->string];
                                        }
                                    }

                                    $rodzajTyp = $typMap[$rodzaj] ?? 0;
                                    $elGid = $element->Gid ?? '';
                                    $fieldName = 'ElementyWnioskuKadrowego[' . $elGid . ']';
                                    $inputRequired = $czyWymagany ? true : false;
                                    $gidRodzajuWniosku = $wniosek->GidRodzaju ?? '';
                                    $nazwaPola = $element->Nazwa ?? '';
                                    $kodNumeru = $element->KodNumer ?? 0;
                                    ?>

                                    <div class="form-group" data-element-index="<?php echo $index; ?>">
                                        <label
                                            class="col-xs-12 col-md-2 control-label<?php if ($inputRequired): ?> required<?php endif; ?>">
                                            <?php echo $nazwa; ?>
                                            <?php if ($inputRequired): ?><span class="text-red">*</span><?php endif; ?>
                                        </label>
                                        <div class="col-xs-12 col-md-6">
                                            <?php
                                            switch ($rodzajTyp) {
                                                case 1:
                                                    // Grupa - kontener, nie wyświetlamy wartości
                                                    echo '<p class="form-control-static">-- Grupa --</p>';
                                                    break;

                                                case 2:
                                                    // Okres - DataOd i DataDo (wysyłamy tylko WartoscPHPX)
                                                    echo '<div class="row">';
                                                    echo '<div class="col-xs-6">';
                                                    echo $this->Form->input($fieldName, [
                                                        'class' => 'form-control datepicker',
                                                        'label' => false,
                                                        'placeholder' => 'Data od',
                                                        'type' => 'text',
                                                        'value' => $wartoscX,
                                                        'required' => $inputRequired
                                                    ]);
                                                    echo '</div>';
                                                    echo '</div>';
                                                    break;

                                                case 3:
                                                    // Godzina - jedna godzina HH:mm
                                                    echo $this->Form->input($fieldName, [
                                                        'class' => 'form-control timepicker',
                                                        'label' => false,
                                                        'placeholder' => 'HH:mm',
                                                        'type' => 'text',
                                                        'value' => $wartoscX,
                                                        'required' => $inputRequired
                                                    ]);
                                                    break;

                                                case 4:
                                                    // ZakresGodzin - dwie godziny HH:mm - HH:mm (wysyłamy tylko WartoscPHPX)
                                                    echo '<div class="row">';
                                                    echo '<div class="col-xs-6">';
                                                    echo $this->Form->input($fieldName, [
                                                        'id' => 'ZakresGodzin_' . $elGid . '_od',
                                                        'class' => 'form-control timepicker zakres-godzina-od',
                                                        'label' => false,
                                                        'placeholder' => 'Godzina od',
                                                        'type' => 'text',
                                                        'value' => $wartoscX,
                                                        'required' => $inputRequired
                                                    ]);
                                                    echo '</div>';
                                                    echo '</div>';
                                                    echo '<span class="help-block text-red" style="display:none;" id="ZakresGodzin_' . $elGid . '_error">Godzina "do" nie może być wcześniejsza niż godzina "od"</span>';
                                                    break;

                                                case 5:
                                                    // ZakresGodzinIGodziny (wysyłamy tylko WartoscPHPX)
                                                    echo '<div class="row">';
                                                    echo '<div class="col-xs-4">';
                                                    echo $this->Form->input($fieldName, [
                                                        'id' => 'ZakresGodzinIGodziny_' . $elGid . '_ilosc',
                                                        'class' => 'form-control timepicker ilosc-godzin',
                                                        'label' => false,
                                                        'placeholder' => 'Ilość godzin',
                                                        'type' => 'text',
                                                        'value' => $wartoscX,
                                                        'required' => $inputRequired
                                                    ]);
                                                    echo '</div>';
                                                    echo '</div>';
                                                    break;

                                                case 6:
                                                    // Godziny
                                                    echo $this->Form->input($fieldName, [
                                                        'class' => 'form-control timepicker',
                                                        'label' => false,
                                                        'placeholder' => 'HHHHH:mm',
                                                        'type' => 'text',
                                                        'value' => $wartoscX,
                                                        'required' => $inputRequired
                                                    ]);
                                                    break;

                                                case 7:
                                                    // LiczbaCalkowita
                                                    $liczbaOptions = [
                                                        'class' => 'form-control text-right input-narrow',
                                                        'label' => false,
                                                        'type' => 'number',
                                                        'value' => $wartoscX,
                                                        'required' => $inputRequired
                                                    ];
                                                    if (!empty($element->Min)) {
                                                        $liczbaOptions['min'] = $element->Min;
                                                    }
                                                    if (!empty($element->Max)) {
                                                        $liczbaOptions['max'] = $element->Max;
                                                    }
                                                    echo $this->Form->input($fieldName, $liczbaOptions);
                                                    break;

                                                case 8:
                                                    // LiczbaZmiennoprzecinkowa
                                                    $decimalOptions = [
                                                        'class' => 'form-control text-right input-narrow',
                                                        'label' => false,
                                                        'type' => 'number',
                                                        'value' => $wartoscX,
                                                        'title' => 'Wpisz poprawną wartość',
                                                        'required' => $inputRequired
                                                    ];
                                                    if (!empty($element->Min)) {
                                                        $decimalOptions['min'] = $element->Min;
                                                    }
                                                    if (!empty($element->Max)) {
                                                        $decimalOptions['max'] = $element->Max;
                                                    }
                                                    // MiejscPoPrzecinku (krok)
                                                    $miejscPoPrzecinku = (int)($element->MiejscPoPrzecinku ?? 2);
                                                    if (!empty($element->MiejscPoPrzecinku)) {
                                                        $decimalOptions['step'] = '0.' . str_repeat('0', $miejscPoPrzecinku - 1) . '1';
                                                    } else {
                                                        $decimalOptions['step'] = '0.01';
                                                    }
                                                    // MiejscPrzedPrzecinkiem (maxlength) i pattern dla formatowania
                                                    $miejscPrzedPrzecinkiem = (int)($element->MiejscPrzedPrzecinkiem ?? 0);
                                                    if (!empty($element->MiejscPrzedPrzecinkiem)) {
                                                        $decimalOptions['maxlength'] = $miejscPrzedPrzecinkiem + $miejscPoPrzecinku + 1;
                                                    }
                                                    // Dodaj pattern HTML5 dla formatowania (np. dla'Etat: 2 cyfry przed, 4 po przecinku)
                                                    if ($miejscPrzedPrzecinkiem > 0 && $miejscPoPrzecinku > 0) {
                                                        $decimalOptions['pattern'] = '\d{1,' . $miejscPrzedPrzecinkiem . '}(\.\d{1,' . $miejscPoPrzecinku . '})?';
                                                        $decimalOptions['placeholder'] = 'np. 12.' . str_repeat('0', $miejscPoPrzecinku - 1) . '5';
                                                    }
                                                    echo $this->Form->input($fieldName, $decimalOptions);
                                                    break;

                                                case 9:
                                                    // Tekst
                                                    $tekstOptions = [
                                                        'class' => 'form-control',
                                                        'label' => false,
                                                        'value' => $wartoscX,
                                                        'required' => $inputRequired
                                                    ];
                                                    // Min/Max jako długość tekstu
                                                    if (!empty($element->Max)) {
                                                        $tekstOptions['maxlength'] = (int)$element->Max;
                                                    }
                                                    // CzyWieleLinii - jeśli true to textarea, false to input text
                                                    // Używamy filter_var do obsługi stringów "true"/"false" oraz boolean
                                                    $czyWieleLinii = filter_var($element->CzyWieleLinii ?? false, FILTER_VALIDATE_BOOLEAN);
                                                    if ($czyWieleLinii) {
                                                        $tekstOptions['type'] = 'textarea';
                                                        $tekstOptions['rows'] = 4;
                                                    } else {
                                                        $tekstOptions['type'] = 'text';
                                                    }
                                                    echo $this->Form->input($fieldName, $tekstOptions);
                                                    break;

                                                case 10:
                                                    // TakNie
                                                    $checked = ($wartoscX ?? '') === 'true' || $wartoscX === '1';
                                                    echo $this->Form->checkbox($fieldName, [
                                                        'label' => false,
                                                        'checked' => $checked,
                                                        'value' => 'true'
                                                    ]);
                                                    break;

                                                case 11:
                                                    // Opcje - select
                                                    $options = ['' => '-- Wybierz --'];
                                                    foreach ($dostepneWartosci as $val) {
                                                        $options[$val] = $val;
                                                    }
                                                    echo $this->Form->select($fieldName, $options, [
                                                        'class' => 'form-control',
                                                        'label' => false,
                                                        'empty' => false,
                                                        'value' => $wartoscX,
                                                        'required' => $inputRequired
                                                    ]);
                                                    break;

                                                case 12:
                                                    // ListaWartosci - radio
                                                    foreach ($dostepneWartosci as $val) {
                                                        echo '<label class="radio-inline">';
                                                        echo $this->Form->radio($fieldName, [[$val => $val]], ['hiddenField' => false, 'value' => $wartoscX]);
                                                        echo ' ' . $val . '</label>';
                                                    }
                                                    break;

                                                case 13:
                                                    // Data
                                                    $dataOptions = [
                                                        'class' => 'form-control datepicker input-narrow',
                                                        'label' => false,
                                                        'type' => 'text',
                                                        'value' => $wartoscX,
                                                        'required' => $inputRequired,
                                                        'autocomplete' => 'off'
                                                    ];
                                                    // Min i Max dla dat
                                                    if (!empty($element->Min)) {
                                                        $dataOptions['min'] = $element->Min;
                                                    }
                                                    if (!empty($element->Max)) {
                                                        $dataOptions['max'] = $element->Max;
                                                    }
                                                    echo $this->Form->input($fieldName, $dataOptions);
                                                    break;

                                                case 14:
                                                    // Adres - input z triggerem do modala
                                                    // Dodajemy ukryte pole z wartością do wysłania (pełny adres zamiast nazwy wyświetlanej)
                                                    // Dla widocznego spanu - parsuj adres i wyświetl ładnie
                                                    // Format z serwera: [GID|EMAIL|NAZWA|NAZWA_WYSWIETLANA|DATA|...]
                                                    $adresDisplayValue = $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)
                                                        $adresDisplayValue = $adrParts[2] ?? $wartoscX;
                                                    }
                                                    ?>
                                                    <div class="input-group">
                                                        <?php
                                                        // Ukryte pole z pełnym adresem do wysłania do API
                                                        echo $this->Form->hidden($fieldName . '_adres', [
                                                            'value' => $wartoscX,
                                                            'class' => 'wnioski-kadrowe-address-value'
                                                        ]);
                                                        ?>
                                                        <!-- Widoczny span z nazwą wyświetlaną (nie input, żeby nie mylić się z danymi formularza) -->
                                                        <span class="form-control wnioski-kadrowe-address-input"
                                                              data-element-gid="<?php echo $elGid; ?>"
                                                              data-gid-rodzaju="<?php echo $gidRodzajuWniosku; ?>"
                                                              data-nazwa-pola="<?php echo $nazwaPola; ?>"><?php echo htmlspecialchars($adresDisplayValue ?? ''); ?></span>
                                                        <span class="input-group-addon wnioski-kadrowe-address-trigger"
                                                              style="cursor: pointer;"
                                                              data-element-gid="<?php echo $elGid; ?>"
                                                              data-gid-rodzaju="<?php echo $gidRodzajuWniosku; ?>"
                                                              data-nazwa-pola="<?php echo $nazwaPola; ?>">
                                                            <i class="fa fa-search"></i>
                                                        </span>
                                                    </div>
                                                    <?php
                                                    break;

                                                case 15:
                                                    // Kod - jedno pole wyświetla treść, przekazuje kod
                                                    // Ukryte pole z kodem (do wysłania), widoczny span z treścią
                                                    ?>
                                                    <div class="input-group">
                                                        <?php
                                                        // Ukryte pole z kodem do wysłania
                                                        echo $this->Form->hidden($fieldName . '_kod', [
                                                            'value' => $wartoscX,
                                                            'class' => 'wnioski-kadrowe-code-value'
                                                        ]);
                                                        ?>
                                                        <!-- Widoczny span z treścią kodu (nie input, żeby nie mylić się z danymi formularza) -->
                                                        <span class="form-control wnioski-kadrowe-code-input"
                                                              data-element-gid="<?php echo $elGid; ?>"
                                                              data-gid-rodzaju="<?php echo $gidRodzajuWniosku; ?>"
                                                              data-nazwa-pola="<?php echo $nazwaPola; ?>"
                                                              data-kod-numer="<?php echo $kodNumeru; ?>"><?php echo htmlspecialchars($wartoscY ?? ''); ?></span>
                                                        <span class="input-group-addon wnioski-kadrowe-code-trigger"
                                                              style="cursor: pointer;"
                                                              data-element-gid="<?php echo $elGid; ?>"
                                                              data-gid-rodzaju="<?php echo $gidRodzajuWniosku; ?>"
                                                              data-nazwa-pola="<?php echo $nazwaPola; ?>"
                                                              data-kod-numer="<?php echo $kodNumeru; ?>">
                                                            <i class="fa fa-search"></i>
                                                        </span>
                                                    </div>
                                                    <?php
                                                    break;

                                                default:
                                                    echo $this->Form->input($fieldName, [
                                                        'class' => 'form-control',
                                                        'label' => false,
                                                        'type' => 'text',
                                                        'value' => $wartoscX,
                                                        'required' => $inputRequired
                                                    ]);
                                                    break;
                                            }
                                            ?>
                                        </div>
                                    </div>
                                <?php endforeach; ?>
                                <?php if ($grupaIndex > 0): ?>
                                    <hr style="margin: 20px 0; border-top: 2px solid #ddd;">
                                    <div class="form-group grupa-naglowek"></div>
                                <?php endif; ?>
                                <?php $grupaIndex++; ?>
                            <?php else: ?>
                                <?php if (!empty($pelnaSciezka)): ?>
                                    <?php
                                    $isExpandableEmpty = !empty($grupaData['czyRozwijana']);
                                    $isInitiallyCollapsedEmpty = !empty($grupaData['czyInicjalnieZwinieta']);
                                    $collapsedClassEmpty = $isExpandableEmpty && $isInitiallyCollapsedEmpty ? 'group-collapsed' : '';
                                    ?>
                                    <div class="form-group grupa-naglowek <?php echo $collapsedClassEmpty; ?>"
                                         data-pelna-sciezka="<?php echo htmlspecialchars($pelnaSciezka); ?>"
                                         data-czy-rozwijana="<?php echo $isExpandableEmpty ? '1' : '0'; ?>"
                                         data-czy-inicjalnie-zwinieta="<?php echo $isInitiallyCollapsedEmpty ? '1' : '0'; ?>">
                                        <div class="col-xs-12">
                                            <?php if ($isExpandableEmpty): ?>
                                                <i class="fa fa-chevron-right group-toggle-icon"
                                                   style="cursor: pointer; margin-right: 8px;"></i>
                                            <?php endif; ?>
                                            <h3 class="box-title text-danger"
                                                style="display: inline;"><?php echo $grupaData['etykieta']; ?></h3>
                                        </div>
                                    </div>
                                <?php endif; ?>
                            <?php endif; ?>
                        <?php endforeach; ?>

                    <?php else: ?>
                        <div class="alert alert-warning">
                            <p>Nie można pobrać danych wniosku.</p>
                            <a data-menu-action="wnioskiKadrowe" class="btn btn-default btn-flat"
                               href="/wnioskiKadrowe">Wróć do listy wniosków</a>
                        </div>
                    <?php endif; ?>
                <?php else: ?>
                    <div class="alert alert-warning">
                        <p>Nie można pobrać danych wniosku.</p>
                        <a data-menu-action="wnioskiKadrowe" class="btn btn-default btn-flat" href="/wnioskiKadrowe">Wróć
                            do listy wniosków</a>
                    </div>
                <?php endif; ?>
                <?php if (!empty($wniosek)): ?>
                    <!-- Sekcja Informacje o przetwarzaniu -->
                    <div class="col-xs-12">
                        <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
                            <div class="panel panel-default">
                                <div class="panel-heading" role="tab" id="headingPrzetwarzanie">
                                    <h4 class="panel-title">
                                        <a role="button" data-toggle="collapse" data-parent="#accordion"
                                           href="#collapsePrzetwarzanie"
                                           aria-expanded="true" aria-controls="collapsePrzetwarzanie">
                                            Informacje o przetwarzaniu <i class="fa fa-chevron-down"></i>
                                        </a>
                                    </h4>
                                </div>
                                <div id="collapsePrzetwarzanie" class="panel-collapse collapse" role="tabpanel"
                                     aria-labelledby="headingPrzetwarzanie">
                                    <div class="panel-body">
                                        <div class="form-horizontal">
                                            <div class="form-group">
                                                <label class="col-xs-12 col-md-2 control-label">Muszą
                                                    zaakceptować</label>
                                                <div class="col-xs-12 col-md-10">
                                                    <input
                                                        value="<?php echo !empty($wniosek->AkceptujacyOpis) ? $wniosek->AkceptujacyOpis : ''; ?>"
                                                        disabled="disabled" type="text" class="form-control"/>
                                                </div>
                                            </div>
                                            <div class="form-group">
                                                <label class="col-xs-12 col-md-2 control-label">Zaakceptowali</label>
                                                <div class="col-xs-12 col-md-10">
                                                    <input
                                                        value="<?php echo !empty($wniosek->AkceptacjeOpis) ? $wniosek->AkceptacjeOpis : ''; ?>"
                                                        disabled="disabled" type="text" class="form-control"/>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>

                    <div class="form-group">
                        <label class="col-xs-12 col-md-2 control-label">&nbsp;</label>
                        <div class="col-xs-12 col-md-10">
                            <div id="SprawdzWniosekKadrowyResponse" style="position: relative; top: -20px;"></div>
                            <a data-menu-action="wnioskiKadrowe" style="margin-right: 10px;"
                               class="btn btn-default btn-flat pull-left" href="/wnioskiKadrowe">Anuluj</a>
                            <a class="btn btn-primary btn-flat pull-left" id="SprawdzWniosekKadrowy">Sprawdź wniosek</a>
                            <?php echo $this->Form->submit('Zapisz', ['class' => 'btn btn-success btn-flat pull-left hidden', 'disabled' => 'disabled']); ?>
                        </div>
                        <div class="clearfix"></div>
                    </div>
                <?php endif; ?>
            </div>
        </div>
    </div>
</div>

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

<script>
    $(document).ready(function () {
        datepickerInit();
        timepickerInit();

        $("#pWniosekKadrowyEdytujForm").validate({
            invalidHandler: function (event, validator) {
                var errors = validator.numberOfInvalids();
                if (errors > 0) {
                    $(validator.errorList).each(function () {
                        var $invalidElement = $(this.element);
                        var $group = $invalidElement.closest('.form-group.grupa-naglowek');
                        if ($group.length && $group.hasClass('group-collapsed')) {
                            $group.removeClass('group-collapsed');
                            $group.find('.group-toggle-icon').removeClass('fa-chevron-down').addClass('fa-chevron-right');
                            $group.nextUntil('.grupa-naglowek').show();
                        }
                    });
                }
            },
            submitHandler: function (form) {
                // Clear previous response message before submitting
                $('#SprawdzWniosekKadrowyResponse').empty();

                $('#table-loading2[data-main-loader]').css('visibility', 'visible');
                $('#table-loading2[data-main-loader]').css('opacity', '1');
                $('#table-loading2[data-main-loader]').css('display', 'block');

                $('#pWniosekKadrowyEdytujForm').ajaxSubmit({
                    success: function (response) {
                        response = JSON.parse(response);

                        $('#table-loading2[data-main-loader]').css('visibility', 'hidden');
                        $('#table-loading2[data-main-loader]').css('opacity', '0');
                        $('#table-loading2[data-main-loader]').css('display', 'none');

                        // Use ResponseHandler for unified response processing
                        var result = ResponseHandler.process(response, {
                            showSuccessToast: false,
                            showErrorToast: false,
                            updateFormOnError: false
                        });

                        if (result.type === 'error') {
                            // Show error message in styled format
                            var errorContent = '<div style="margin-bottom: 10px;">';
                            errorContent += '<div class="pull-left"><i class="fa fa-times-circle" style="color: #dd4b39; font-size: 16px; margin-right: 10px; position: relative; top: 3px;"></i></div>';
                            errorContent += '<div class="pull-left"><b>Błąd</b><br />' + result.message + '</div>';
                            errorContent += '<div class="clearfix"></div>';
                            errorContent += '</div>';
                            $('#SprawdzWniosekKadrowyResponse').html(errorContent);
                            showError(result.message);
                        } else if (result.type === 'success') {
                            hideMessages();
                            showSuccess(result.message);
                            loadAjaxView('/wnioskiKadrowe');
                        }
                    }
                });
            }
        });

        $('#SprawdzWniosekKadrowy').click(function () {
            if ($('#pWniosekKadrowyEdytujForm').valid()) {
                $('#SprawdzWniosekKadrowyResponse').html('<b>Proszę czekać...</b>');
                $('#table-loading2[data-main-loader]').css('visibility', 'visible');
                $('#table-loading2[data-main-loader]').css('opacity', '1');
                $('#table-loading2[data-main-loader]').css('display', 'block');

                $.ajax({
                    method: 'POST',
                    data: $('#pWniosekKadrowyEdytujForm').serializeArray(),
                    url: local_url + 'ajax/api/sprawdzWniosekKadrowy'
                }).done(function (response) {
                    $('#table-loading2[data-main-loader]').css('visibility', 'hidden');
                    $('#table-loading2[data-main-loader]').css('opacity', '0');
                    $('#table-loading2[data-main-loader]').css('display', 'none');

                    try {
                        response = JSON.parse(response);
                    } catch (e) {
                        showError('Nieprawidłowa odpowiedź serwera');
                        return;
                    }

                    // Use ResponseHandler for unified response processing
                    var result = ResponseHandler.process(response, {
                        showSuccessToast: false,
                        showErrorToast: false,
                        updateFormOnError: false
                    });

                    if (result.type === 'error') {
                        // Show error in styled format (similar to dodaj_wniosek.php)
                        var errorContent = '<div style="margin-bottom: 10px;">';
                        errorContent += '<div class="pull-left"><i class="fa fa-times-circle" style="color: #dd4b39; font-size: 16px; margin-right: 10px; position: relative; top: 3px;"></i></div>';
                        errorContent += '<div class="pull-left"><b>Błąd</b><br />' + result.message + '</div>';
                        errorContent += '<div class="clearfix"></div>';
                        errorContent += '</div>';
                        $('#SprawdzWniosekKadrowyResponse').html(errorContent);
                    } else if (result.type === 'login') {
                        // Login redirect handled by ResponseHandler
                    } else if (result.type === 'success') {
                        // Show success message in styled format (similar to dodaj_wniosek.php)
                        var successContent = '<div style="margin-bottom: 10px;">';
                        successContent += '<div class="pull-left"><i class="fa fa-check-circle" style="color: #00a65a; font-size: 16px; margin-right: 10px; position: relative; top: 3px;"></i></div>';
                        successContent += '<div class="pull-left"><b>Sukces</b><br />' + result.message + '</div>';
                        successContent += '<div class="clearfix"></div>';
                        successContent += '</div>';
                        $('#SprawdzWniosekKadrowyResponse').html(successContent);
                        $('#SprawdzWniosekKadrowy').addClass('hidden');
                        $('form input[type="submit"][disabled="disabled"]').removeAttr('disabled').removeClass('hidden');
                    }
                });
            }
        });
        initCollapsibleGroups();

        function initCollapsibleGroups() {
            $('.grupa-naglowek[data-czy-rozwijana="1"]').each(function () {
                var $header = $(this);
                var isInitiallyCollapsed = $header.data('czy-inicjalnie-zwinieta');

                if (isInitiallyCollapsed) {
                    $header.addClass('group-collapsed');
                    $header.nextUntil('.grupa-naglowek').hide();
                    $header.find('.group-toggle-icon').removeClass('fa-chevron-right').addClass('fa-chevron-down');
                }

                $header.on('click', function () {
                    var $this = $(this);
                    var $content = $this.nextUntil('.grupa-naglowek');
                    var $icon = $this.find('.group-toggle-icon');

                    if ($this.hasClass('group-collapsed')) {
                        $content.show();
                        $this.removeClass('group-collapsed');
                        $icon.removeClass('fa-chevron-down').addClass('fa-chevron-right');
                    } else {
                        $content.hide();
                        $this.addClass('group-collapsed');
                        $icon.removeClass('fa-chevron-right').addClass('fa-chevron-down');
                    }
                });
            });
        }
    });
</script>

<script>
    $(function () {
        const elemsData = document.querySelectorAll('[data-menu-action]');
        elemsData.forEach(elem => elem.onclick = testFun);

        // Walidacja ZakresGodzin
        $('.zakres-godzina-od, .zakres-godzina-do').on('blur', function () {
            var id = $(this).attr('id');
            var index = id.replace('ZakresGodzin_', '').replace('_od', '').replace('_do', '');
            validateTimeRange('ZakresGodzin_' + index + '_od', 'ZakresGodzin_' + index + '_do', 'ZakresGodzin_' + index + '_error');
        });

        // Auto-obliczanie Godzina Do dla ZakresGodzinIGodziny
        $('.ilosc-godzin, .godzina-od').on('blur', function () {
            var id = $(this).attr('id');
            var index = id.replace('ZakresGodzinIGodziny_', '').replace('_ilosc', '').replace('_od', '');
            calculateGodzinaDoForIndex(index);
        });
    });

    function parseTimeToMinutes(timeStr) {
        if (!timeStr || timeStr === '') return null;
        var parts = String(timeStr).trim().split(':');
        var h = parseInt(parts[0], 10) || 0;
        var m = parts.length > 1 ? parseInt(parts[1], 10) || 0 : 0;
        return h * 60 + m;
    }

    function formatMinutesToTime(totalMinutes) {
        totalMinutes = Math.floor(totalMinutes);
        var h = Math.floor(totalMinutes / 60);
        var m = totalMinutes % 60;
        return h + ':' + (m < 10 ? '0' : '') + m;
    }

    function validateTimeRange(odId, doId, errorId) {
        var odVal = $('#' + odId).val();
        var doVal = $('#' + doId).val();
        var mOd = parseTimeToMinutes(odVal);
        var mDo = parseTimeToMinutes(doVal);
        if (mOd === null || mDo === null) {
            $('#' + errorId).hide();
            return true;
        }
        if (mDo < mOd) {
            $('#' + errorId).show();
            return false;
        } else {
            $('#' + errorId).hide();
            return true;
        }
    }

    function calculateGodzinaDoForIndex(index) {
        var iloscId = 'ZakresGodzinIGodziny_' + index + '_ilosc';
        var odId = 'ZakresGodzinIGodziny_' + index + '_od';
        var doId = 'ZakresGodzinIGodziny_' + index + '_do';

        var iloscVal = $('#' + iloscId).val();
        var odVal = $('#' + odId).val();

        if (!iloscVal || !odVal) return;

        var iloscMinutes = parseTimeToMinutes(iloscVal);
        var odMinutes = parseTimeToMinutes(odVal);

        if (iloscMinutes === null || odMinutes === null) return;

        var doMinutes = odMinutes + iloscMinutes;
        $('#' + doId).val(formatMinutesToTime(doMinutes));
    }

    function testFun(e) {
        e.preventDefault();
        $(this).parents('.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);
    }

    $(document).on('invalid', 'input[type="number"]', function (e) {
        var step = $(this).attr('step');
        var msg = 'Wpisz poprawną wartość.';
        if (step && step.includes('.')) {
            var decimals = step.split('.')[1].length;
            msg = 'Wpisz wartość z dokładnością do ' + decimals + ' miejsc po przecinku.';
        }
        e.target.setCustomValidity(msg);
    });

    $(document).on('input', 'input[type="number"]', function () {
        this.setCustomValidity('');
    });
</script>

<!-- Modal for addresses selection -->
<div class="modal fade" id="wnioski-kadrowe-addresses-modal">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">Wybierz adres</h4>
            </div>
            <div class="modal-body" id="wnioski-kadrowe-addresses-body">
                <div class="loader-holder" id="wnioski-kadrowe-addresses-loader">
                    <div class="loader"></div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Anuluj</button>
                <button type="button" class="btn btn-success" id="wnioski-kadrowe-addresses-submit">Wybierz</button>
            </div>
        </div>
    </div>
</div>

<!-- Modal for codes selection -->
<div class="modal fade" id="code-list-modal">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                <h4 class="modal-title">Wybierz kody</h4>
            </div>
            <div class="modal-body" id="code-list-body">
                <div class="row">
                    <div class="loader-holder" id="code-list-loader">
                        <div class="loader"></div>
                    </div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Zamknij</button>
                <button type="button" class="btn btn-success" id="code-list-submit">Zapisz</button>
            </div>
        </div>
    </div>
</div>

<script>
    $(document).ready(function () {
        var wnioskiKadroweAddressesModal = null;
        var wnioskiKadroweAddressesBody = null;
        var wnioskiKadroweAddressesLoader = null;
        var $wnioskiKadroweActiveInput = null;
        var wnioskiKadroweAddressModalOpened = false;
        var wnioskiKadroweCodeModalOpened = false;

        // Initialize addresses modal
        function initWnioskiKadroweAddressesModal() {
            wnioskiKadroweAddressesModal = $('#wnioski-kadrowe-addresses-modal');
            wnioskiKadroweAddressesBody = wnioskiKadroweAddressesModal.find('#wnioski-kadrowe-addresses-body');
            wnioskiKadroweAddressesLoader = wnioskiKadroweAddressesModal.find('#wnioski-kadrowe-addresses-loader');

            // Open modal on trigger click (span)
            $(document).off('click.wnioskiKadroweAddress').on('click.wnioskiKadroweAddress', '.wnioski-kadrowe-address-trigger', function (e) {
                e.preventDefault();
                e.stopPropagation(); // Zapobiega podwójnemu uruchomieniu modala

                if (wnioskiKadroweAddressModalOpened) {
                    return;
                }
                wnioskiKadroweAddressModalOpened = true;

                $wnioskiKadroweActiveInput = $(this).closest('.input-group').find('.wnioski-kadrowe-address-input, .wnioski-kadrowe-code-input');

                var gidRodzaju = $(this).data('gid-rodzaju') || '';
                var nazwaPola = $(this).data('nazwa-pola') || '';
                var zmetody = 'WnioskiKadrowe.' + gidRodzaju + '.' + nazwaPola;

                wnioskiKadroweAddressesModal.modal('show');

                $.ajax({
                    url: local_url + 'ajax_daj_adresy/' + zmetody,
                    type: 'POST',
                    data: {},
                    dataType: 'HTML',
                    beforeSend: function () {
                        showLoader(wnioskiKadroweAddressesLoader);
                    },
                    success: function (response) {
                        if (response !== 'empty' && response.trim() !== '') {
                            wnioskiKadroweAddressesBody.html(response);
                            checkboxesInit('#wnioski-kadrowe-addresses-modal');
                            // Convert checkboxes to single-select (radio-like behavior)
                            $('#wnioski-kadrowe-addresses-modal input[type="checkbox"]').on('change', function () {
                                if (this.checked) {
                                    $('#wnioski-kadrowe-addresses-modal input[type="checkbox"]').not(this).prop('checked', false);
                                }
                            });
                        } else {
                            wnioskiKadroweAddressesBody.html('<p>Brak dostępnych adresów</p>');
                        }
                        hideLoader(wnioskiKadroweAddressesLoader);
                    },
                    error: function () {
                        wnioskiKadroweAddressesBody.html('<p>Błąd pobierania adresów</p>');
                        hideLoader(wnioskiKadroweAddressesLoader);
                    }
                });
            });

            // Reset flag when modal is closed
            wnioskiKadroweAddressesModal.on('hidden.bs.modal', function () {
                wnioskiKadroweAddressModalOpened = false;
            });

            // Handle submit - use off() to prevent duplicate handlers
            $('#wnioski-kadrowe-addresses-submit').off('click').on('click', function () {
                var checked = wnioskiKadroweAddressesModal.find('input[type=checkbox]:checked');
                if (checked.length > 0) {
                    // ID (value) do ukrytego pola, nazwa wyświetlana do widocznego
                    var addressId = checked.first().attr('id');
                    // Szukaj label powiązanego z checkboxem
                    var addressLabel = '';
                    var $label = wnioskiKadroweAddressesModal.find('label[for="' + addressId + '"]');
                    if ($label.length > 0) {
                        addressLabel = $label.text().trim();
                    }
                    if (!addressLabel) {
                        addressLabel = addressId;
                    }
                    var $inputGroup = $wnioskiKadroweActiveInput.closest('.input-group');
                    // Ukryte pole z ID
                    $inputGroup.find('.wnioski-kadrowe-address-value').val(addressId);
                    // Widoczne pole z nazwą wyświetlaną
                    $wnioskiKadroweActiveInput.html(addressLabel);
                    wnioskiKadroweAddressesModal.modal('hide');
                }
            });
        }

        // Initialize codes modal (using existing code-list-modal from paths.js)
        function initWnioskiKadroweCodesModal() {
            var codesModal = $('#code-list-modal');
            var codesModalBody = codesModal.find('#code-list-body');
            var codesModalLoader = codesModal.find('#code-list-loader');

            $(document).off('click.wnioskiKadroweCode').on('click.wnioskiKadroweCode', '.wnioski-kadrowe-code-trigger', function (e) {
                e.preventDefault();
                e.stopPropagation(); // Zapobiega podwójnemu uruchomieniu modala

                if (wnioskiKadroweCodeModalOpened) {
                    return;
                }
                wnioskiKadroweCodeModalOpened = true;

                $wnioskiKadroweActiveInput = $(this).closest('.input-group').find('.wnioski-kadrowe-address-input, .wnioski-kadrowe-code-input');

                var kodNumeru = $(this).data('kod-numer');
                var data = {};
                if (typeof kodNumeru !== 'undefined' && kodNumeru !== null && kodNumeru !== '0' && kodNumeru !== '') {
                    data.code = kodNumeru;
                }

                $.ajax({
                    url: local_url + 'ajax_daj_liste_kodow',
                    type: 'POST',
                    data: data,
                    dataType: 'HTML',
                    beforeSend: function () {
                        showLoader(codesModalLoader);
                    },
                    success: function (response) {
                        if (response !== 'empty' && response.trim() !== '') {
                            codesModalBody.html(response);
                            checkboxesInit('#code-list-modal');
                            // Convert checkboxes to single-select (radio-like behavior)
                            $('#code-list-modal input[type="checkbox"]').on('change', function () {
                                if (this.checked) {
                                    $('#code-list-modal input[type="checkbox"]').not(this).prop('checked', false);
                                }
                            });
                        } else {
                            codesModalBody.html('<p>Brak dostępnych kodów</p>');
                        }
                        hideLoader(codesModalLoader);
                    },
                    error: function () {
                        codesModalBody.html('<p>Błąd pobierania kodów</p>');
                        hideLoader(codesModalLoader);
                    }
                });

                codesModal.modal('show');
            });

            // Reset flag when modal is closed
            codesModal.on('hidden.bs.modal', function () {
                wnioskiKadroweCodeModalOpened = false;
            });

            $(document).off('click.wnioskiKadroweCodeSubmit').on('click.wnioskiKadroweCodeSubmit', '#code-list-submit', function () {
                var checked = codesModal.find('input[type=checkbox]:checked');
                if (checked.length > 0) {
                    // Kod (id) do ukrytego pola, treść (label) do widocznego
                    var codeValue = checked.first().attr('id');
                    // Szukaj label powiązanego z checkboxem
                    var codeLabel = '';
                    var $label = codesModal.find('label[for="' + codeValue + '"]');
                    if ($label.length > 0) {
                        codeLabel = $label.text().trim();
                    }
                    if (!codeLabel) {
                        codeLabel = codeValue;
                    }
                    var $inputGroup = $wnioskiKadroweActiveInput.closest('.input-group');
                    // Ukryte pole z kodem
                    $inputGroup.find('.wnioski-kadrowe-code-value').val(codeValue);
                    // Widoczne pole z treścią
                    $wnioskiKadroweActiveInput.html(codeLabel);
                    codesModal.modal('hide');
                }
            });
        }

        // Initialize both modals
        initWnioskiKadroweAddressesModal();
        initWnioskiKadroweCodesModal();

        // Load display values for case 14 (Adres) and case 15 (Kod) fields in edit mode
        function loadEditModeFieldValues() {
            // Dla pól adresów (case 14) - pobierz listę i znajdź etykietę
            $('.wnioski-kadrowe-address-value').each(function () {
                var $hiddenInput = $(this);
                var addressId = $hiddenInput.val();
                if (!addressId) return;

                var $inputGroup = $hiddenInput.closest('.input-group');
                var $visibleInput = $inputGroup.find('.wnioski-kadrowe-address-input');
                var gidRodzaju = $visibleInput.data('gid-rodzaju') || '';
                var nazwaPola = $visibleInput.data('nazwa-pola') || '';
                var zmetody = 'WnioskiKadrowe.' + gidRodzaju + '.' + nazwaPola;

                $.ajax({
                    url: local_url + 'ajax_daj_adresy/' + zmetody,
                    type: 'POST',
                    data: {},
                    dataType: 'HTML',
                    async: false,
                    success: function (response) {
                        if (response !== 'empty' && response.trim() !== '') {
                            var $tempDiv = $('<div>').html(response);
                            var $label = $tempDiv.find('label[for="' + addressId + '"]');
                            if ($label.length > 0) {
                                $visibleInput.html($label.text().trim());
                            }
                        }
                    }
                });
            });

            // Dla pól kodów (case 15) - pobierz listę i znajdź etykietę
            $('.wnioski-kadrowe-code-value').each(function () {
                var $hiddenInput = $(this);
                var codeId = $hiddenInput.val();
                if (!codeId) return;

                var $inputGroup = $hiddenInput.closest('.input-group');
                var $visibleInput = $inputGroup.find('.wnioski-kadrowe-code-input');
                var kodNumeru = $visibleInput.data('kod-numer') || 0;

                var data = {};
                if (kodNumeru) {
                    data.code = kodNumeru;
                }

                $.ajax({
                    url: local_url + 'ajax_daj_liste_kodow',
                    type: 'POST',
                    data: data,
                    dataType: 'HTML',
                    async: false,
                    success: function (response) {
                        if (response !== 'empty' && response.trim() !== '') {
                            var $tempDiv = $('<div>').html(response);
                            var $label = $tempDiv.find('label[for="' + codeId + '"]');
                            if ($label.length > 0) {
                                $visibleInput.html($label.text().trim());
                            }
                        }
                    }
                });
            });
        }

        // Wywołaj po załadowaniu strony
        loadEditModeFieldValues();
    });
</script>
