from pathlib import Path
from base64 import b64encode
from httpx import Client
from sys import argv


ENCODING: str = "utf-8"

current_dirpath: Path = Path(__file__).resolve().parent
dist_dirpath: Path = current_dirpath / "dist"


http_client: Client = Client()


def minify_js(js_code: str) -> str:
    response = http_client.post(
        "https://www.toptal.com/developers/javascript-minifier/api/raw",
        data = {
            "input": js_code
        }
    )

    return response.text


def saver(file_path: Path) -> None:
    minified_js: str = "(" + minify_js(file_path.read_text(ENCODING))[:-1] + ")"

    (dist_dirpath / file_path.name).write_text(minified_js)

    (dist_dirpath / (file_path.name + ".txt")).write_text(b64encode(minified_js.encode(ENCODING)).decode(ENCODING))

    print(f"All files saved to [{dist_dirpath}]: {[file_path.name]}")


if __name__ == "__main__":
    if len(argv) != 2 or not argv[1]:
        raise ValueError("No file provided.")

    file_path: Path = current_dirpath / argv[1]

    if not file_path.is_file():
        raise ValueError(f"File [{file_path}] not found.")

    if not dist_dirpath.exists():
        dist_dirpath.mkdir()

    saver(
        file_path
    )
