"""Small RFC 7396-style transformer with explicit product-level fixtures."""
import copy,json
from pathlib import Path

def merge(target, patch):
    if not isinstance(patch,dict): return copy.deepcopy(patch)
    target=copy.deepcopy(target) if isinstance(target,dict) else {}
    for key,value in patch.items():
        if value is None: target.pop(key,None)
        else: target[key]=merge(target.get(key),value)
    return target

base={'name':'Ada','nickname':'A','prefs':{'email':True,'sms':True},'tags':['red','blue']}
cases=[
 ('omitted',{},base),
 ('remove-nickname',{'nickname':None},{k:v for k,v in base.items() if k!='nickname'}),
 ('empty-string',{'nickname':''},{**base,'nickname':''}),
 ('nested-change',{'prefs':{'email':False}},{**base,'prefs':{'email':False,'sms':True}}),
 ('replace-array',{'tags':['green']},{**base,'tags':['green']}),
 ('empty-array',{'tags':[]},{**base,'tags':[]}),
 ('top-level-null',None,None),
 ('remove-absent',{'unknown':None},base),
]
rows=[]
for name,patch,expected in cases:
    observed=merge(base,patch)
    assert observed==expected,name
    assert base['nickname']=='A' and base['prefs']['email'] is True
    rows.append(dict(case=name,patch=patch,result=observed))
# Reproduce an application adapter bug: absent input becomes an explicit null.
request={}
bad_adapter={'nickname':request.get('nickname')}
assert 'nickname' not in merge(base,bad_adapter)
assert merge(base,request)['nickname']=='A'
report=dict(cases=rows,adapter_counterexample=dict(input=request,incorrect_patch=bad_adapter,
            incorrect_result=merge(base,bad_adapter),correct_result=merge(base,request)),
            assertions='passed',scope='In-memory transformation; no HTTP server or SDK tested')
Path(__file__).with_name('results.json').write_text(json.dumps(report,indent=2)+'\n')
print(json.dumps(report,indent=2))
