"""Inline Lantern Pop code and artwork. Python standard library only."""
from pathlib import Path
import argparse, base64, json
ROOT=Path(__file__).resolve().parents[1]
def data_uri(path):
    mime={'.webp':'image/webp','.svg':'image/svg+xml','.png':'image/png'}[path.suffix]
    return 'data:'+mime+';base64,'+base64.b64encode(path.read_bytes()).decode()
def main():
    parser=argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--out',type=Path,default=ROOT.parent/'Lantern-Pop.html')
    args=parser.parse_args()
    html=(ROOT/'index.html').read_text(encoding='utf-8')
    css=(ROOT/'styles.css').read_text(encoding='utf-8')
    for path in (ROOT/'assets').iterdir():
        if path.suffix in ('.webp','.svg','.png'):
            css=css.replace('assets/'+path.name,data_uri(path))
    html=html.replace('<link rel="stylesheet" href="styles.css">','<style>\n'+css+'\n</style>')
    html=html.replace('href="assets/favicon.svg"','href="'+data_uri(ROOT/'assets/favicon.svg')+'"')
    assets={p.name:data_uri(p) for p in (ROOT/'assets').glob('*.webp')}
    html=html.replace('<script src="engine.js"></script>','<script>window.LANTERN_ASSETS='+json.dumps(assets,separators=(',',':'))+';</script>\n<script>\n'+(ROOT/'engine.js').read_text(encoding='utf-8')+'\n</script>')
    for filename in ('levels.js','game.js'):
        html=html.replace(f'<script src="{filename}"></script>','<script>\n'+(ROOT/filename).read_text(encoding='utf-8')+'\n</script>')
    args.out.parent.mkdir(parents=True,exist_ok=True)
    args.out.write_text(html,encoding='utf-8')
    print(f'Built {args.out} ({args.out.stat().st_size:,} bytes)')
if __name__=='__main__':main()
