<?php
declare(strict_types=1);

// Read-only C candidate encoding probe; never emits names or business rows.
if (getenv('CDX_CAT8_UTF8_PROBE') !== '1') {
    echo json_encode(['status' => 'default_deny',
        'database_connected' => false, 'business_http_sent' => false,
        'dml_sent' => false]), PHP_EOL;
    exit(78);
}
try {
    if (!hash_equals((string)getenv('CDX_CAT8_UTF8_PROBE_SHA256'),
        (string)hash_file('sha256', __FILE__))) {
        throw new RuntimeException('Exact reviewed probe SHA required');
    }
    require __DIR__ . '/common.php';
    $ctx = cat8_context('C');
    $rows = cat8_rows($ctx['pdo'],
        'SELECT d.ID AS dish_id,d.NAME AS dish_name,'
        . ' f.ID AS food_id,f.NAME AS food_name,'
        . ' dc.NAME AS dish_category_name,fc.NAME AS food_category_name'
        . ' FROM yoshop_dishes d JOIN yoshop_dishes_foods df ON df.DISHES_ID=d.ID'
        . ' JOIN yoshop_foods f ON f.ID=df.FOODS_ID'
        . ' JOIN yoshop_dishes_cate dc ON dc.ID=d.CATEGORY'
        . ' JOIN yoshop_foods_cate fc ON fc.ID=f.CATEGORY'
        . ' WHERE d.STORE_ID=10001 AND d.IS_DELETE=0 AND d.USER_DELETE=0'
        . ' AND df.STORE_ID=10001 AND df.IS_DELETE=0'
        . ' AND f.STORE_ID=10001 AND f.IS_DELETE=0'
        . ' ORDER BY d.ID,df.ID FETCH FIRST 300 ROWS ONLY');
    $invalid = 0;
    $firstValidIndex = null;
    $gbkLosslessRows = 0;
    $gb18030LosslessRows = 0;
    $lossless = static function ($value, string $encoding): bool {
        if (!is_string($value)) return false;
        $converted = @iconv($encoding, 'UTF-8', $value);
        $roundtrip = is_string($converted)
            ? @iconv('UTF-8', $encoding, $converted) : false;
        return is_string($converted)
            && mb_check_encoding($converted, 'UTF-8')
            && $roundtrip === $value;
    };
    foreach ($rows as $index => $row) {
        $valid = true;
        $gbkLossless = true;
        $gb18030Lossless = true;
        foreach (['dish_name', 'food_name', 'dish_category_name',
            'food_category_name'] as $field) {
            if (!is_string($row[$field] ?? null)
                || !mb_check_encoding($row[$field], 'UTF-8')) {
                $valid = false;
            }
            if (!$lossless($row[$field] ?? null, 'GBK')) $gbkLossless = false;
            if (!$lossless($row[$field] ?? null, 'GB18030')) $gb18030Lossless = false;
        }
        if ($gbkLossless) $gbkLosslessRows++;
        if ($gb18030Lossless) $gb18030LosslessRows++;
        if (!$valid) {
            $invalid++;
        } elseif ($firstValidIndex === null) {
            $firstValidIndex = $index;
        }
    }
    echo json_encode(['status' => 'metadata_only', 'scanned' => count($rows),
        'invalid_utf8_rows' => $invalid,
        'gbk_lossless_rows' => $gbkLosslessRows,
        'gb18030_lossless_rows' => $gb18030LosslessRows,
        'first_valid_index' => $firstValidIndex,
        'business_http_sent' => false, 'dml_sent' => false]), PHP_EOL;
} catch (Throwable $error) {
    echo json_encode(['status' => 'redacted_error',
        'class' => get_class($error), 'business_http_sent' => false,
        'dml_sent' => false]), PHP_EOL;
    exit(2);
}
