from src.utils import root_path
from src.routes.app.api import api_route
from src.routes.app.tools import get_app_asset_content
from flask import Blueprint, send_from_directory, current_app, render_template


app_route = Blueprint(
    "app_route",
    __name__,
    static_folder=root_path().joinpath("fronted", "dist", "assets"),
    static_url_path="/app/assets",
    url_prefix="/app",
)


app_route.register_blueprint(api_route)


@app_route.route("", defaults={"path": ""})
@app_route.route("/", defaults={"path": ""})
@app_route.route("/<path:path>")
def render_app(path):
    urlbase = current_app.config["RELATIVE_PATH"] + app_route.url_prefix
    script_content = get_app_asset_content(r'index-([\w]+).js')
    style_content = get_app_asset_content(r'index-([\w]+).css')
    assets = f'<script type="module" crossorigin>{script_content}</script>'
    assets += f'<style>{style_content}</style>'

    return render_template("app.html", urlbase=urlbase, assets=assets)


@app_route.route("/assets/manifest.json")
def app_manifest():
    return {
        "name": "EVAPP",
        "short_name": "EVAPP",
        "description": "Aplicacion web de EVAPP",
        "start_url": "/ev-server/app/",
        "scope": "/ev-server/app/",
        "display": "standalone",
        "background_color": "#ffffff",
        "theme_color": "#000000",
        "orientation": "portrait",
        "icons": [
            {
                "src": "/ev-server/app/icons/icon-192.png",
                "sizes": "192x192",
                "type": "image/png"
            },
            {
                "src": "/ev-server/app/icons/icon-512.png",
                "sizes": "512x512",
                "type": "image/png"
            }
        ]
    }


@app_route.route("/assets/index.js")
def app_script():
    return get_app_asset_content(r'index-([\w]+).js')


@app_route.route("/assets/index.css")
def app_style():
    return get_app_asset_content(r'index-([\w]+).css')


@app_route.route("/assets/<path:filename>")
def send_static(filename):
    return send_from_directory(
        root_path().joinpath("fronted", "dist", "assets"), filename
    )
