import pathlib
from typing import List
import argparse
import requests
def download_file(url: str, path: pathlib.Path):
    response = requests.get(url)
    path.write_bytes(response.content)
# create a new pyscript project
def create_project(root_folder: pathlib.Path,
                   title: str,
                   packages: List[str],
                   paths: List[str] = None,
                   pyscript_css_url: str = "https://pyscript.net/alpha/pyscript.css",
                   pyscript_js_url: str = "https://pyscript.net/alpha/pyscript.min.js",
                   pyscript_py_url: str = "https://pyscript.net/alpha/pyscript.py",
                   bootstrap_css_url: str = "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css",
                   bootstrap_js_url: str = "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js",
                   pyscript_bootstrap_templates_wheel_url: str = "https://the-cake-is-a-lie.net/gogs/jonas/pyscript-bootstrap-templates/raw/branch/main/dist/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl"):
    pyenv = f"- ./resources/{pyscript_bootstrap_templates_wheel_url.split('/')[-1]}"
    for package in packages:
        pyenv += f"\n            - {package}"
    if paths is not None:
        pyenv += "\n            - paths:"
        for path in paths:
            pyenv += f"\n                - {path}"
    pyenv += "\n"
    html = f"""
    
        
        
        
        
        
        
        {title}
        
            {pyenv}
        
    
    
        
        
        
    
    """
    py = f"""
from pyscript_bootstrap_templates import bootstrap_templates
from pyscript_bootstrap_templates import bootstrap_HTML as bHTML
from pyscript_bootstrap_templates import HTML as HTML
app = bootstrap_templates.PyScriptBootstrapDashboard(
    parent_element="pyscript_app", brand_name="{title}")
div = bHTML.BootstrapContainer("This is a sidebar", parent=app.sidebar)
div.font_size = 4
btn = bHTML.ButtonPrimary("Click me", parent=app.sidebar)
btn.w = 100
btn.onclick = lambda _: bHTML.AlertSuccess(
    "You clicked me!", parent=app.main_area)
    """
    if root_folder.exists():
        raise("Value Error: root_folder already exists. Please choose a different name.")
    root_folder.mkdir(parents=True)
    (root_folder / "resources").mkdir(parents=True)
    # Download files:
    download_file(pyscript_css_url, root_folder / "resources" / "pyscript.css")
    download_file(pyscript_js_url, root_folder / "resources" / "pyscript.js")
    download_file(pyscript_py_url, root_folder / "resources" / "pyscript.py")
    download_file(bootstrap_css_url, root_folder /
                  "resources" / "bootstrap.css")
    download_file(bootstrap_js_url, root_folder / "resources" / "bootstrap.js")
    download_file(pyscript_bootstrap_templates_wheel_url,
                  root_folder / "resources" / pyscript_bootstrap_templates_wheel_url.split("/")[-1])
    (root_folder / "index.html").write_text(html, encoding="utf-8")
    (root_folder / "main.py").write_text(py, encoding="utf-8")
def main():
    argument_parser = argparse.ArgumentParser(
        description="create a new pyscript project")
    argument_parser.add_argument(
        "root_folder", type=pathlib.Path, help="the root folder of the new project")
    argument_parser.add_argument(
        "title", type=str, help="the title of the new project")
    argument_parser.add_argument(
        "packages", type=str, nargs="*", help="the packages to include in the new project")
    argument_parser.add_argument("--paths", type=str, nargs="+",
                                 help="additional local python files to include in the new project")
    argument_parser.add_argument("--pyscript_css_url", type=str,
                                 help="the url of the pyscript css file", default="https://pyscript.net/alpha/pyscript.css")
    argument_parser.add_argument("--pyscript_js_url", type=str,
                                 help="the url of the pyscript js file", default="https://pyscript.net/alpha/pyscript.min.js")
    argument_parser.add_argument("--pyscript_py_url", type=str,
                                    help="the url of the pyscript py file", default="https://pyscript.net/alpha/pyscript.py")
    argument_parser.add_argument("--bootstrap_css_url", type=str,
                                    help="the url of the bootstrap css file", default="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css")
    argument_parser.add_argument("--bootstrap_js_url", type=str,
                                    help="the url of the bootstrap js file", default="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js")
    argument_parser.add_argument("--pyscript_bootstrap_templates_wheel_url", type=str,
                                    help="the url of the pyscript bootstrap templates wheel file", default="https://the-cake-is-a-lie.net/gogs/jonas/pyscript-bootstrap-templates/raw/branch/main/dist/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl")
    args = argument_parser.parse_args()
    create_project(args.root_folder, args.title, args.packages, args.paths, args.pyscript_css_url, args.pyscript_js_url, args.pyscript_py_url, args.bootstrap_css_url, args.bootstrap_js_url, args.pyscript_bootstrap_templates_wheel_url)
if __name__ == "__main__":
    main()
    exit(0)