#!/usr/bin/env python3
"""Materialize ROOT-approved two changes and two extra cases; does not access DB."""
import hashlib
import json
import re
from pathlib import Path
root = Path(__file__).parent
original = root / 'scratch-proposal.json'
trigger = root / 'scratch-trigger-hex.sql'
assert hashlib.sha256(original.read_bytes()).hexdigest() == '1053345753e9b0ca343ddca289fa9c7c2b3482e55895d3f3ce4bc154e4686280'
assert hashlib.sha256(trigger.read_bytes()).hexdigest() == '610159c08ce1c50a29a8554e21d6c9b9a46a4d8110b2be1db3e67ddafa8f58cc'
plan = json.loads(original.read_text())
plan['authorization'] = 'ROOT_APPROVED_SCRATCH_V2_20261011'
plan['approved_diff'] = ['C NAME VARCHAR(128 CHAR)', 'C trigger canonical hexadecimal compare', 'T13 empty name', 'T14 128 Chinese characters last-character change']
plan['budget'].update(DML_per_lane=29, read_SELECT_per_lane_max=120)
plan['lanes']['C']['create_table'] = plan['lanes']['C']['create_table'].replace('name VARCHAR(128) NOT NULL', 'name VARCHAR(128 CHAR) NOT NULL')
plan['lanes']['C']['create_trigger'] = trigger.read_text()
for lane, spec in plan['lanes'].items():
    table = spec['table']
    for label, name, changed in [('T13-empty', 'CDXUTCCFF927311-Alpha', ''), ('T14-128chinese', '汉' * 127 + '甲', '汉' * 127 + '乙')]:
        spec['cases'].append({'label': label, 'reset_SQL': f"UPDATE {table} SET id=1,name='{name}',flag=0,update_time='2001-01-01 01:01:01' WHERE id=1", 'test_SQL': f"UPDATE {table} SET name='{changed}' WHERE id=1", 'readback_SQL': f'SELECT * FROM {table}', 'expected_timestamp_hypothesis': 'clock', 'old': '2001-01-01 01:01:01', 'explicit': '2002-02-02 02:02:02'})
    for case in spec['cases']:
        name = re.search(r"name='([^']*)'", case['reset_SQL']).group(1)
        case['reset_expected'] = {'id': '1', 'name': name, 'flag': '0', 'update_time': case['old']}
        expected = {'id': '1', 'name': name, 'flag': '0'}
        assignments = case['test_SQL'].split(' SET ', 1)[1].split(' WHERE ', 1)[0]
        for column in ('id', 'name', 'flag'):
            match = re.search(r"(?:^|,)" + column + r"=(?:'([^']*)'|([0-9]+))(?:,|$)", assignments)
            if match:
                expected[column] = match.group(1) if match.group(1) is not None else match.group(2)
        case['test_expected_non_time'] = expected
output = root / 'scratch-executed-v2.json'
data = json.dumps(plan, ensure_ascii=False, indent=2) + '\n'
output.write_text(data)
print(json.dumps({'plan': output.name, 'sha256': hashlib.sha256(data.encode()).hexdigest(), 'cases_per_lane': 14, 'DML_per_lane': 29}))
