<?php

declare(strict_types=1);

// Diagnose legacy "1" predicate on code-local development MySQL. SELECT only.
if ($argc!==2 || $argv[1]!=='--probe-local-mysql-readonly') {
    fwrite(STDERR,"Explicit read-only probe flag required\n");
    exit(2);
}
try {
    $load=static function(string $path): array { return require $path; };
    $root='/workspace/zhct/zhctproject/store';
    $local=$load($root.'/application/config/local/database.php');
    foreach (['A'=>'/tmp/zhct-http-store-a.l5omH8',
        'B'=>'/tmp/zhct-http-store-mysql.dQTTBP'] as $rootPath) {
        $runtime=$load($rootPath.'/application/database.php');
        foreach (['hostname','database','username','password'] as $key) {
            if (!isset($runtime[$key],$local[$key])
                || $runtime[$key]!==$local[$key]) {
                throw new RuntimeException('Not code-local development MySQL');
            }
        }
    }
    $db=new PDO('mysql:host='.$local['hostname'].';port='.
        (int)($local['hostport']??3306).';dbname='.$local['database']
        .';charset=utf8mb4',(string)$local['username'],
        (string)$local['password'],[
            PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_EMULATE_PREPARES=>false,
            PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC,
            PDO::ATTR_TIMEOUT=>8,
        ]);
    $version=(string)$db->query('SELECT VERSION()')->fetchColumn();
    if (strpos($version,'5.6.')===false) {
        throw new RuntimeException('Wrong development MySQL version');
    }
    $mode=(string)$db->query('SELECT @@SESSION.sql_mode')->fetchColumn();
    $metaStmt=$db->prepare('SELECT DATA_TYPE,NUMERIC_PRECISION,NUMERIC_SCALE'
        .' FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=?'
        .' AND TABLE_NAME=? AND COLUMN_NAME=?');
    $metaStmt->execute([(string)$local['database'],'ydy_dishes','weight']);
    $weightMeta=$metaStmt->fetch(PDO::FETCH_ASSOC);
    $zeroWeight=(int)$db->query('SELECT COUNT(*) FROM ydy_dishes'
        .' WHERE is_del=1 AND status=1 AND weight=0')->fetchColumn();
    $results=[];
    foreach (['legacy_double_quote'=>'SELECT COUNT(*) FROM ydy_dishes'
            .' WHERE is_del = "1" AND status = "1"',
        'numeric_literal'=>'SELECT COUNT(*) FROM ydy_dishes'
            .' WHERE is_del = 1 AND status = 1'] as $label=>$sql) {
        try {
            $results[$label]=['status'=>'pass',
                'row_count'=>(int)$db->query($sql)->fetchColumn()];
        } catch (Throwable $error) {
            $results[$label]=['status'=>'fail',
                'class'=>get_class($error),
                'code'=>(string)$error->getCode()];
        }
    }
    echo json_encode(['mysql_version'=>$version,
        'sql_mode_has_ansi_quotes'=>strpos($mode,'ANSI_QUOTES')!==false,
        'sql_mode_has_only_full_group_by'=>strpos($mode,'ONLY_FULL_GROUP_BY')!==false,
        'active_zero_weight_rows'=>$zeroWeight,
        'weight_column_type'=>$weightMeta ? strtolower((string)$weightMeta['DATA_TYPE']):null,
        'weight_precision'=>$weightMeta ? (int)$weightMeta['NUMERIC_PRECISION']:null,
        'weight_scale'=>$weightMeta ? (int)$weightMeta['NUMERIC_SCALE']:null,
        'php_empty_string_0_00'=>empty('0.00'),
        'predicates'=>$results],JSON_UNESCAPED_SLASHES).PHP_EOL;
} catch (Throwable $error) {
    echo json_encode(['status'=>'blocked','class'=>get_class($error),
        'code'=>(string)$error->getCode()]).PHP_EOL;
    exit(1);
}
