"""本主题专属离线算法，仅读取同目录合成JSON，不联网、不控制设备。"""
import csv, json, math, re, struct
from pathlib import Path
from fractions import Fraction
BASE=Path(__file__).resolve().parent
data=json.loads((BASE/'input.json').read_text(encoding='utf-8'))['data']
slots=bytes(data['slots']);a=data['port_address']
packet=b'Art-Net'+bytes([0])+struct.pack('<H',0x5000)+struct.pack('>H',14)+bytes([data['sequence'],0,a&255,(a>>8)&127])+struct.pack('>H',len(slots))+slots
swapped=bytearray(packet);swapped[8:10]=bytes(reversed(swapped[8:10]))
badlen=bytearray(packet);badlen[16:18]=bytes([4,0])
rows=[]
for name,p in [('valid',packet),('swapped_opcode',swapped),('wrong_length',badlen)]:
 op=struct.unpack('<H',p[8:10])[0];length=struct.unpack('>H',p[16:18])[0]
 ok=p[:8]==b'Art-Net'+bytes([0]) and op==0x5000 and 2<=length<=512 and length%2==0 and len(p)==18+length
 rows.append({'name':name,'hex':p.hex(),'opcode':hex(op),'length':length,'actual_bytes':len(p),'valid_for_this_fixture':ok})
assert [r['valid_for_this_fixture'] for r in rows]==[True,False,False]
result={'packets':rows,'network_sent':False}
(BASE/'result.json').write_text(json.dumps(result,ensure_ascii=False,indent=2)+'\n',encoding='utf-8')
print(json.dumps(result,ensure_ascii=False))
