<?php
declare(strict_types=1);

// Nonproduction C: only public catalog/menu IDs in memory, no values or HTTP.
require __DIR__ . '/../parallel-ai-health-read-batch/c_readonly_preflight.php';
$stage = 'store_catalog_mapped_menu';
$start = date('Y-m-d');
$end = date('Y-m-d', strtotime($start . ' +7 days'));
$sql = 'SELECT r.RESTAURANT_ID,r.MENU_DATE,r.MEAL_TIMES,d.AI_DISHES_ID'
    . ' FROM YDY_RECIPES r INNER JOIN YDY_DISHES d'
    . ' ON d.UUID=r.DISHES_UUID INNER JOIN YDY_RESTAURANTS x'
    . ' ON x.ID=r.RESTAURANT_ID WHERE r.MENU_DATE>=? AND r.MENU_DATE<?'
    . ' AND d.IS_DELETE=0 AND d.AI_DISHES_ID>0'
    . ' AND x.STATUS=1 AND x.IS_DELETE=2'
    . ' AND (x.STALL_TYPE=1 OR (x.STALL_TYPE=2 AND r.MENU_DATE=?))'
    . ' ORDER BY r.RESTAURANT_ID,r.MENU_DATE,r.MEAL_TIMES,r.ID DESC';
$statement = $store->prepare($sql);
$statement->execute([$start, $end, $start]);
$groups = [];
$catalogRowsRead = 0;
foreach ($statement->fetchAll(PDO::FETCH_ASSOC) as $row) {
    $row = array_change_key_case($row, CASE_LOWER);
    $key = (string)$row['restaurant_id'] . '|'
        . (string)$row['menu_date'] . '|'
        . (string)$row['meal_times'];
    $groups[$key][] = (int)$row['ai_dishes_id'];
    $catalogRowsRead++;
}
$stage = 'ai_catalog_relation';
$naturalNonemptyGroup = false;
$eligibleSmallGroups = 0;
$candidateKey = null;
foreach ($groups as $groupKey => $ids) {
    if (count($ids) < 1 || count($ids) > 15) continue;
    [$rid, $date, $mealTimes] = explode('|', $groupKey, 3);
    $orderCount = $store->prepare('SELECT COUNT(*) FROM YDY_MEAL_ORDER'
        . ' WHERE RESTAURANT_ID=? AND MEAL_DATE=? AND MEAL_TIMES=?');
    $orderCount->execute([(int)$rid, $date, (int)$mealTimes]);
    if ((int)$orderCount->fetchColumn() !== 0) continue;
    $menuCount = $store->prepare('SELECT COUNT(*) FROM YDY_INITIAL_MENU m'
        . ' INNER JOIN YDY_MEAL_ORDER o ON o.ID=m.MEAL_ORDER_ID'
        . ' WHERE o.RESTAURANT_ID=? AND o.MEAL_DATE=? AND o.MEAL_TIMES=?');
    $menuCount->execute([(int)$rid, $date, (int)$mealTimes]);
    if ((int)$menuCount->fetchColumn() !== 0) continue;
    $eligibleSmallGroups++;
    $ids = array_values(array_unique($ids));
    $params = implode(',', array_fill(0, count($ids), '?'));
    $query = $ai->prepare('SELECT COUNT(*) FROM YOSHOP_DISHES'
        . ' WHERE STORE_ID=10001 AND IS_DELETE=0 AND ID IN (' . $params . ')');
    $query->execute($ids);
    if ((int)$query->fetchColumn() > 0) {
        $naturalNonemptyGroup = true;
        $candidateKey = $groupKey;
        break;
    }
}
echo json_encode(['status' => 'catalog-c-natural-menu-relation-readonly',
    'next_7_days_window' => [$start, $end],
    'public_catalog_rows_inspected_in_memory' => $catalogRowsRead,
    'small_active_zero_order_groups' => $eligibleSmallGroups,
    'natural_nonempty_ai_store_catalog_group_exists' => $naturalNonemptyGroup,
    'catalog_ids_or_names_output' => false,
    'personal_or_order_rows_read' => 0,
    'business_http_count' => 0, 'writes' => 0],
    JSON_UNESCAPED_SLASHES), PHP_EOL;
