import json
import os
import sys

import htmlmin
import requests

TAB = ' ' * 4

"""
Usage:

<body>
    <script src="./mixed.js"></script>
</body>
"""


def str_encode(s: str) -> str:
    return json.dumps(s)


output_str = """
(function (document) {
    // Use the old syntax to ensure compatibility
    var script = [
        $SCRIPT$
    ];
    var stylesheet = [
        $STYLESHEET$
    ];
    for (var i = 0; i < script.length; ++i) {
        var tag = document.createElement('script');
        tag.innerText = script[i];
        document.head.appendChild(tag);
    }
    for (var i = 0; i < stylesheet.length; ++i) {
        var tag = document.createElement('style');
        tag.innerText = stylesheet[i];
        document.head.appendChild(tag);
    }
    document.body.innerHTML = $BODY$;
})(document);
""".strip('\n')

os.chdir(sys.path[0])

session = requests.Session()

# script url
url_list = [
    'https://cdn.jsdelivr.net/gh/urlib/bin_4@ae285cbe/f7/a4/39/bb/f7a439bbab9612538a40ece8251c2c74bfb0c1dadf95f6d52a41de7b885e73b8.js'
]

script_list = {}
for url in url_list:
    script_list[url] = None

# stylesheet url
url_list = [
    'https://cdn.jsdelivr.net/gh/urlib/bin_4@4a3967e9/c8/41/6f/57/c8416f5753692a0dccd43714db8655e12f30c7e986081c3b6864daa65bc8e2f9.css'
]

stylesheet_list = {}
for url in url_list:
    stylesheet_list[url] = None

for url in script_list:
    resp = session.get(url)
    assert resp.ok
    script_list[url] = resp.text

for url in stylesheet_list:
    resp = session.get(url)
    assert resp.ok
    stylesheet_list[url] = resp.text

body_html = """
    <script>window._slide = 1;</script><div id=head>\u4e8c\u7ef4\u7801\u89e3\u7801</div><div id=div1><div id=mid><form action method=post enctype=multipart/form-data name=upload_form id=up onclick=\"document.getElementById('upload').click();\"><div>\u70b9\u51fb\u4e0a\u4f20\u4e8c\u7ef4\u7801</div><input name=imgfile type=file value=test id=upload onchange=\"document.getElementById('upp').click();\" hidden><input name=upload type=submit value=\u89e3\u7801 hidden id=upp></form><div class=text>\u5185\u5bb9\uff1a</div><div id=ans>&nbsp;</div></div></div>
"""


def get_html_minified(s: str) -> str:
    return htmlmin.minify(s, remove_comments=True, remove_empty_space=True, reduce_boolean_attributes=True)


body_html = get_html_minified(body_html)


def get_beautify_str(tup: tuple) -> str:
    url, text = tup
    return f'// url: {url}\n{TAB}{TAB}{str_encode(text)}'


script = f',\n{TAB}{TAB}'.join(
    map(get_beautify_str, script_list.items()))
stylesheet = f',\n{TAB}{TAB}'.join(
    map(get_beautify_str, stylesheet_list.items()))


def fill(template: str, tag: str, content: str) -> str:
    assert template.count(tag) == 1
    return template.replace(tag, content, 1)


output_str = fill(output_str, '$SCRIPT$', script)
output_str = fill(output_str, '$STYLESHEET$', stylesheet)
output_str = fill(output_str, '$BODY$', str_encode(body_html))


with open('mixed.js', 'w') as fout:
    fout.write(output_str)
