@php
  $impostazioni = $impostazioniAsporto ?? \App\Models\Impostazioni::query()
    ->where('attivita_id', session('attivita_attuale'))
    ->where('gruppo', 'asporto')
    ->orderBy('id')
    ->get()
    ->keyBy('chiave');

  $giorniLabel = collect([
    1 => 'Lun',
    2 => 'Mar',
    3 => 'Mer',
    4 => 'Gio',
    5 => 'Ven',
    6 => 'Sab',
    7 => 'Dom',
  ]);

  $shortLabels = [
    'ora_inizio_asporto' => 'Inizio',
    'ora_fine_asporto' => 'Fine',
    'ora_inizio_prenotazione_asporto' => 'Inizio',
    'ora_fine_prenotazione_asporto' => 'Fine',
    'giorni_disponibilita_asporto' => 'Giorni',
    'durata_slot_oraria_consegna_asporto' => 'Durata (min)',
    'qta_massima_ordini_per_slot_oraria' => 'Max ordini',
    'qta_massima_piatti_per_slot_oraria' => 'Max piatti',
    'tolleranza_qta_piatti_per_slot_oraria' => 'Tolleranza',
    'costo_fisso_per_ordine' => 'Importo (€)',
  ];

  $gruppi = [
    [
      'id' => 'servizio',
      'title' => 'Orari servizio',
      'desc' => 'Fascia operativa del banco asporto',
      'icon' => 'bx-time-five',
      'col' => 'col-md-6 col-xl-4',
      'fieldsClass' => 'asporto-config-group__fields--pair',
      'chiavi' => ['ora_inizio_asporto', 'ora_fine_asporto'],
    ],
    [
      'id' => 'prenotazione',
      'title' => 'Orari prenotazione',
      'desc' => 'Quando i clienti possono ordinare',
      'icon' => 'bx-calendar',
      'col' => 'col-md-6 col-xl-4',
      'fieldsClass' => 'asporto-config-group__fields--pair',
      'chiavi' => ['ora_inizio_prenotazione_asporto', 'ora_fine_prenotazione_asporto'],
    ],
    [
      'id' => 'disponibilita',
      'title' => 'Disponibilità',
      'desc' => 'Giorni in cui il servizio è attivo',
      'icon' => 'bx-calendar-check',
      'col' => 'col-md-6 col-xl-4',
      'fieldsClass' => '',
      'chiavi' => ['giorni_disponibilita_asporto'],
    ],
    [
      'id' => 'slot',
      'title' => 'Slot e capacità',
      'desc' => 'Durata slot e limiti di carico',
      'icon' => 'bx-grid-alt',
      'col' => 'col-md-8 col-xl-8',
      'fieldsClass' => 'asporto-config-group__fields--grid4',
      'chiavi' => [
        'durata_slot_oraria_consegna_asporto',
        'qta_massima_ordini_per_slot_oraria',
        'qta_massima_piatti_per_slot_oraria',
        'tolleranza_qta_piatti_per_slot_oraria',
      ],
    ],
    [
      'id' => 'costi',
      'title' => 'Costi',
      'desc' => 'Costo fisso applicato all’ordine',
      'icon' => 'bx-euro',
      'col' => 'col-md-4 col-xl-4',
      'fieldsClass' => '',
      'chiavi' => ['costo_fisso_per_ordine'],
    ],
  ];

  $chiaviUsate = collect($gruppi)->pluck('chiavi')->flatten()->all();
  $altre = $impostazioni->reject(fn ($i) => in_array($i->chiave, $chiaviUsate, true))->values();

  $renderCampo = function ($impostazione) use ($giorniLabel, $shortLabels) {
    $tipo = strtolower((string) $impostazione->tipo);
    $fieldId = 'impostazione-'.$impostazione->id;
    $label = $shortLabels[$impostazione->chiave]
      ?? ($impostazione->label ?: ucfirst(str_replace('_', ' ', (string) $impostazione->chiave)));
    $valore = $impostazione->valore;
    $opzioni = is_array($impostazione->opzioni) ? $impostazione->opzioni : [];
    $selezionati = array_filter(array_map('trim', explode(',', (string) $valore)));
    $hint = trim((string) ($impostazione->descrizione ?? $impostazione->label ?? ''));

    return compact('tipo', 'fieldId', 'label', 'valore', 'opzioni', 'selezionati', 'hint', 'impostazione');
  };
@endphp

<form id="asporto-config-form" class="asporto-config-form">
  @csrf

  <div class="d-flex flex-wrap align-items-center justify-content-between gap-2 mb-3">
    <div>
      <h5 class="mb-0">Impostazioni servizio</h5>
      <div class="small text-muted">Orari, disponibilità, slot e costi</div>
    </div>
    @if($impostazioni->isNotEmpty())
      <button type="submit" class="btn btn-sm btn-primary" id="asporto-config-save">
        <i class="bx bx-save me-1"></i>Salva configurazione
      </button>
    @endif
  </div>

  @if($impostazioni->isEmpty())
    <div class="alert alert-secondary mb-0">
      Nessuna impostazione asporto trovata per questa attività.
    </div>
  @else
    <div class="row g-3">
      @foreach($gruppi as $gruppo)
        @php
          $campi = collect($gruppo['chiavi'])->map(fn ($c) => $impostazioni->get($c))->filter();
        @endphp
        @continue($campi->isEmpty())

        <div class="{{ $gruppo['col'] }}">
          <div class="card h-100 asporto-config-card" data-config-group="{{ $gruppo['id'] }}">
            <div class="card-header asporto-config-card__head">
              <div class="asporto-config-card__title">
                <i class="bx {{ $gruppo['icon'] }}" aria-hidden="true"></i>
                <span>{{ $gruppo['title'] }}</span>
              </div>
              @if(!empty($gruppo['desc']))
                <div class="asporto-config-card__desc">{{ $gruppo['desc'] }}</div>
              @endif
            </div>
            <div class="card-body">
              <div class="asporto-config-group__fields {{ $gruppo['fieldsClass'] }}">
                @foreach($campi as $impostazione)
                  @include('asporto._partials.dashboard._config_campo', $renderCampo($impostazione) + [
                    'compact' => true,
                    'wide' => $gruppo['id'] === 'disponibilita',
                  ])
                @endforeach
              </div>
            </div>
          </div>
        </div>
      @endforeach

      @if($altre->isNotEmpty())
        <div class="col-12">
          <div class="card h-100 asporto-config-card" data-config-group="altro">
            <div class="card-header asporto-config-card__head">
              <div class="asporto-config-card__title">
                <i class="bx bx-slider-alt" aria-hidden="true"></i>
                <span>Altro</span>
              </div>
            </div>
            <div class="card-body">
              <div class="asporto-config-group__fields asporto-config-group__fields--grid4">
                @foreach($altre as $impostazione)
                  @include('asporto._partials.dashboard._config_campo', $renderCampo($impostazione) + ['compact' => true])
                @endforeach
              </div>
            </div>
          </div>
        </div>
      @endif
    </div>
  @endif
</form>
