from odoo.http import Controller, request, route


class PWA(Controller):
    def get_asset_urls(self, asset_xml_id):
        qweb = request.env["ir.qweb"].sudo()
        assets = qweb._get_asset_nodes(asset_xml_id, {}, True, True)
        urls = []
        for asset in assets:
            if asset[0] == "link":
                urls.append(asset[1]["href"])
            if asset[0] == "script":
                urls.append(asset[1]["src"])
        return urls

    @route("/service-worker.js", type="http", auth="public")
    def service_worker(self):
        qweb = request.env["ir.qweb"].sudo()
        urls = []
        urls.extend(self.get_asset_urls("web.assets_common"))
        urls.extend(self.get_asset_urls("web.assets_backend"))
        version_list = []
        for url in urls:
            version_list.append(url.split("/")[3])
        cache_version = "-".join(version_list)
        mimetype = "text/javascript;charset=utf-8"
        content = qweb.render(
            "web_pwa_oca.service_worker",
            {"pwa_cache_name": cache_version, "pwa_files_to_cache": urls},
        )
        return request.make_response(content, [("Content-Type", mimetype)])

    @route("/web_pwa_oca/manifest.json", type="http", auth="public")
    def manifest(self):
        qweb = request.env["ir.qweb"].sudo()
        config_param = request.env["ir.config_parameter"].sudo()
        pwa_name = config_param.get_param("pwa.manifest.name", "Odoo PWA")
        pwa_short_name = config_param.get_param("pwa.manifest.short_name", "Odoo PWA")
        icon128x128 = config_param.get_param(
            "pwa.manifest.icon128x128", "/web_pwa_oca/static/img/icons/icon-128x128.png"
        )
        icon144x144 = config_param.get_param(
            "pwa.manifest.icon144x144", "/web_pwa_oca/static/img/icons/icon-144x144.png"
        )
        icon152x152 = config_param.get_param(
            "pwa.manifest.icon152x152", "/web_pwa_oca/static/img/icons/icon-152x152.png"
        )
        icon192x192 = config_param.get_param(
            "pwa.manifest.icon192x192", "/web_pwa_oca/static/img/icons/icon-192x192.png"
        )
        icon256x256 = config_param.get_param(
            "pwa.manifest.icon256x256", "/web_pwa_oca/static/img/icons/icon-256x256.png"
        )
        icon512x512 = config_param.get_param(
            "pwa.manifest.icon512x512", "/web_pwa_oca/static/img/icons/icon-512x512.png"
        )
        background_color = config_param.get_param(
            "pwa.manifest.background_color", "#2E69B5"
        )
        theme_color = config_param.get_param("pwa.manifest.theme_color", "#2E69B5")
        mimetype = "application/json;charset=utf-8"
        content = qweb.render(
            "web_pwa_oca.manifest",
            {
                "pwa_name": pwa_name,
                "pwa_short_name": pwa_short_name,
                "icon128x128": icon128x128,
                "icon144x144": icon144x144,
                "icon152x152": icon152x152,
                "icon192x192": icon192x192,
                "icon256x256": icon256x256,
                "icon512x512": icon512x512,
                "background_color": background_color,
                "theme_color": theme_color,
            },
        )
        return request.make_response(content, [("Content-Type", mimetype)])