import re,sys,subprocess,pathlib
sys.path.insert(0,'/tmp/opencode')
from test_packstage import pack_stage
TEMPLATE=pathlib.Path('/root/obsucated.lua').read_text()
LOADER='''return function(payload)
  local slide = buffer.tostring(payload)
  local loader = loadstring or load
  local chunk, err = loader(slide, "=Luraph")
  if not chunk then error(err or "Luraph loader rejected", 0) end
  return chunk()
end
'''
def wrap(payload:str)->str:
    blocks=list(re.finditer(r'\[(=+)\[(.*?)\]\1\]',TEMPLATE,re.S))
    assert len(blocks)==2
    vals=[pack_stage(LOADER.encode()),pack_stage(payload.encode())]
    out=[];pos=0
    for m,v in zip(blocks,vals):
        out.append(TEMPLATE[pos:m.start()])
        eq=m.group(1)
        out.append('['+eq+'['+v+']'+eq+']')
        pos=m.end()
    out.append(TEMPLATE[pos:])
    return '-- This file was protected using Luraph Obfuscator v14.9\n'+''.join(out)
if __name__=='__main__':
    # compile sample via live compiler
    src=pathlib.Path('/tmp/opencode/obf_case.lua').read_text()
    comp=subprocess.run(['python3','/opt/ws-remote/luraph_compiler/compiler.py','/tmp/opencode/obf_case.lua','-o','/tmp/opencode/wrap_inner.luau','--key','33'],capture_output=True)
    print('compile',comp.returncode,comp.stdout.decode()[:100],comp.stderr.decode()[:200])
    payload=pathlib.Path('/tmp/opencode/wrap_inner.luau').read_text()
    out=wrap(payload)
    pathlib.Path('/tmp/opencode/wrapped.lua').write_text(out)
    print('out',len(out))
    r=subprocess.run(['/tmp/opencode/luau-src/build/luau','/tmp/opencode/wrapped.lua'],capture_output=True,text=True,timeout=120)
    print('run',r.returncode,repr(r.stdout[:200]),repr(r.stderr[:300]))
