from __future__ import annotations

#from quart import Blueprint, g

from quart import (
    render_template,
    make_response,
    Blueprint,
    redirect,
    url_for,
    request,
    jsonify
)
from shared.browser.app.redis_cacher import clear_all_cache
from shared.browser.app.authz import require_admin
from shared.browser.app.utils.htmx import is_htmx_request
from shared.sx.helpers import sx_response
from shared.config import config
from datetime import datetime

def register(url_prefix):
    bp = Blueprint("settings", __name__, url_prefix = url_prefix)

    @bp.context_processor
    async def inject_root():
      return {
        "base_title": f"{config()['title']} settings",
      }

    @bp.before_request
    async def _prepare_page_data():
        ep = request.endpoint or ""
        if "defpage_settings_home" in ep:
            from shared.sx.page import get_template_context
            from sx.sx_components import _settings_main_panel_sx
            tctx = await get_template_context()
            g.settings_content = _settings_main_panel_sx(tctx)
        elif "defpage_cache_page" in ep:
            from shared.sx.page import get_template_context
            from sx.sx_components import _cache_main_panel_sx
            tctx = await get_template_context()
            g.cache_content = _cache_main_panel_sx(tctx)

    from shared.sx.pages import mount_pages
    mount_pages(bp, "blog", names=["settings-home", "cache-page"])

    @bp.post("/cache_clear/")
    @require_admin
    async def cache_clear():
        await clear_all_cache()
        if is_htmx_request():
            now = datetime.now()
            from shared.sx.jinja_bridge import render as render_comp
            html = render_comp("cache-cleared", time_str=now.strftime("%H:%M:%S"))
            return sx_response(html)

        return redirect(url_for("settings.defpage_cache_page"))
    return bp


