"""Original CC0 evaluation fixtures; no network calls or OCR. Run with bundled Python."""
from pathlib import Path
import hashlib, json, platform, random
from PIL import Image, ImageDraw, ImageFont, ImageFilter, __version__ as pillow_version
from reportlab.pdfgen import canvas
from reportlab.lib.utils import ImageReader
import reportlab
from pypdf import PdfReader
ROOT=Path(__file__).resolve().parent
FONT=ROOT/'assets/NotoSansCJKjp-Regular.otf'
sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest()
CASES={
'ja-prose':['小さな図書室の朝','窓を開けると、庭から涼しい風が入りました。','係の人は返却された本を机に並べます。','青い箱には地図、白い箱には物語を入れました。','午前九時、最初の読者が静かに扉を開けました。'],
'zh-prose':['社区花园的记录','今天早晨，志愿者给花园里的植物浇水。','东边的木箱种着薄荷，西边的花盆种着番茄。','大家把工具放回架子，并在本子上写下日期。','下午如果下雨，明天就不需要再次浇水。'],
'degraded-scan':['Workshop note','At dawn, Mira counted seven wooden trays.','Three held blue stones; four held green leaves.','She wrote the total on a small paper card.','Before noon, the shelves were clean and dry.']}
records=[]
for name in ['ja-prose','zh-prose','merged-table','degraded-scan']:
    folder=ROOT/name; folder.mkdir(exist_ok=True)
    im=Image.new('RGB',(1240,1754),'white'); d=ImageDraw.Draw(im)
    def txt(x,y,t,size=34):d.text((x,y),t,font=ImageFont.truetype(str(FONT),size),fill='black')
    if name=='merged-table':
        lines=['備品の記録','品目 数量 保管場所','棚 箱','筆 6 A 2','紙 12 B 3']
        txt(110,130,lines[0],46)
        xs=[110,440,660,880,1100]; ys=[290,380,470,560,650]
        for y in [290,470,560,650]:d.line((110,y,1100,y),fill='black',width=3)
        d.line((660,380,1100,380),fill='black',width=3)
        for x in [110,440,660,1100]:d.line((x,290,x,650),fill='black',width=3)
        d.line((880,380,880,650),fill='black',width=3)
        for x,y,t in [(140,345,'品目'),(470,345,'数量'),(770,305,'保管場所'),(730,395,'棚'),(950,395,'箱'),(140,490,'筆'),(470,490,'6'),(730,490,'A'),(950,490,'2'),(140,580,'紙'),(470,580,'12'),(730,580,'B'),(950,580,'3')]:txt(x,y,t)
        checks={'cells_in_reading_order':['品目','数量','保管場所','棚','箱','筆','6','A','2','紙','12','B','3'],'spans':[{'text':'品目','rowspan':2},{'text':'数量','rowspan':2},{'text':'保管場所','colspan':2}], 'scoring':'Exact cell text and explicit HTML rowspan/colspan separately; no layout credit from CER.'}
        (folder/'table-ground-truth.json').write_text(json.dumps(checks,ensure_ascii=False,indent=2)+'\n')
    else:
        lines=CASES[name]
        for i,line in enumerate(lines):txt(110,130+i*110,line,46 if i==0 else 34)
    preprocess='1240x1754 RGB raster, 150 dpi, lossless PNG embedded full page; no OCR text layer'
    if name=='degraded-scan':
        im=im.convert('L').resize((620,877),Image.Resampling.BILINEAR).filter(ImageFilter.GaussianBlur(0.75)).rotate(0.7,resample=Image.Resampling.BICUBIC,expand=False,fillcolor=255)
        rng=random.Random(44); im=im.point(lambda p:round(155+p*100/255))
        px=im.load()
        for _ in range(7000):
            x,y=rng.randrange(620),rng.randrange(877);px[x,y]=max(0,px[x,y]-rng.randrange(5,45))
        im=im.convert('RGB');preprocess+='; downsample 2x to 75 dpi, blur radius .75, rotate .7 degrees, contrast range 155..255, 7000 seeded noise samples (seed 44)'
    im.save(folder/'input.png')
    c=canvas.Canvas(str(folder/'input.pdf'),pagesize=(595.2,841.92),invariant=1,pageCompression=1)
    c.drawImage(ImageReader(im),0,0,width=595.2,height=841.92);c.showPage();c.save()
    (folder/'ground-truth.txt').write_text('\n'.join(lines)+'\n')
    reader=PdfReader(folder/'input.pdf');assert len(reader.pages)==1 and reader.pages[0].extract_text()==''
    assert not any(op in reader.pages[0].get_contents().get_data() for op in [b' Tj', b' TJ'])
    record={'id':name,'selected_pages':[0],'preprocessing':preprocess,'no_text_layer':True,'files':{p.name:sha(p) for p in sorted(folder.iterdir()) if p.is_file()}}
    records.append(record)
manifest={'protocol_version':1,'status':'awaiting independent ground-truth review; no conversions attempted','rights':'Original brief text, table, generator and raster artwork dedicated to CC0-1.0. Noto font under SIL OFL 1.1; see assets/OFL.txt. No customer or third-party document content.','font_origin':'https://github.com/notofonts/noto-cjk/tree/main/Sans/OTF/Japanese','font_sha256':sha(FONT),'generator_sha256':sha(Path(__file__)),'versions':{'python':platform.python_version(),'Pillow':pillow_version,'reportlab':reportlab.Version},'allocation':{'attempts_max':12,'attempts_per_case':3,'pages_per_attempt':1,'customer_payment_usd':0,'nominal_provider_ceiling_usd':0.048,'attempts_used':0},'cases':records}
(ROOT/'input-manifest.json').write_text(json.dumps(manifest,ensure_ascii=False,indent=2)+'\n')
print(json.dumps(manifest,ensure_ascii=False,indent=2))
