<?php

declare(strict_types=1);

require_once __DIR__.'/../../../includes/globalinclude.php';
require_once __DIR__.'/../src/warmup.php';

use Cin\AjaxSearch5\Search;
use JTL\Catalog\Product\Artikel;

$ids = [];

$response = [
  'nettoPreise'     => $_SESSION['Kundengruppe']->getIsMerchant(),
  'darfPreiseSehen' => 0 !== $_SESSION['Kundengruppe']->getMayViewPrices(),
  'qs'              => $_POST['qs'],
  'token'           => $_SESSION['jtl_token'],
  'execution_time'  => 0,
];

$S                = new Search($_SESSION['cISOSprache']);
$startTime        = microtime(true);
$hits             = $S->search($_POST['qs']);
$ids              = array_values(array_map('intval', $hits['ids'] ?? []));

$includeChildren = true === $P->getConfig('includechildren');
if ( ! $includeChildren && [] !== $ids) {
  $placeholders = implode(',', array_fill(0, \count($ids), '?'));
  $stmt         = $P->getPDO()->prepare('SELECT kArtikel
    FROM tartikel
    WHERE kVaterArtikel = 0
    AND kArtikel IN ('.$placeholders.')');
  $stmt->execute($ids);

  $parentIds = array_flip(array_map('intval', $stmt->fetchAll(PDO::FETCH_COLUMN)));
  $ids       = array_values(array_filter($ids, static function (int $kArtikel) use ($parentIds): bool {
    return isset($parentIds[$kArtikel]);
  }));
}
$hits['ids']     = $ids;
$response['hits'] = $hits;

$response['execution_time'] = round(microtime(true) - $startTime, 3) * 1000 .' ms';

$response['articles'] = array_values(
  array_filter(
    array_map(function ($kartikel) use ($includeChildren) {
      $options                    = new stdClass();
      $options->nArtikelAttribute = 0;
      $options->nAttribute        = 0;
      $options->nDownload         = 0;
      $options->nKonfig           = 0;
      $options->nMerkmale         = 0;
      $options->nVariationen      = 1;

      $artikel = new Artikel();
      $artikel->fuelleArtikel($kartikel, $options);

      if (null === $artikel->kArtikel) {
        return;
      }
      if ( ! $includeChildren && 0 !== (int) ($artikel->kVaterArtikel ?? 0)) {
        return;
      }

      return [
        'cSeo'                  => $artikel->cSeo,
        'cVorschaubild'         => $artikel->cVorschaubild,
        'cName'                 => $artikel->cName,
        'cArtNr'                => $artikel->cArtNr,
        'cUVPLocalized'         => $artikel->Preise->cVKLocalized[$_SESSION['Kundengruppe']->getIsMerchant()],
        'cLocalizedVPE'         => null !== $artikel->cLocalizedVPE ? $artikel->cLocalizedVPE[$_SESSION['Kundengruppe']->getIsMerchant()] : '',
        'kArtikel'              => $artikel->kArtikel,
        'canBePlacedIntoBasket' => 1 === $artikel->inWarenkorbLegbar
          && 1 !== ! $artikel->nIstVater
          && \is_array($artikel->Variationen)
          && (0 === \count($artikel->Variationen))
          && (
            0 !== $_SESSION['Kundengruppe']->getMayViewPrices()
          ),
      ];
    }, $ids),
    static function ($artikel) {
      return null !== $artikel;
    }
  )
);

header('Content-Type: application/json');
exit(json_encode($response));
