from __future__ import annotations

from quart import (
    Blueprint, g, request,
)


from shared.browser.app.authz import require_admin
from shared.browser.app.redis_cacher import clear_cache
from shared.sx.helpers import sx_response




def register():
    bp = Blueprint("admin", __name__, url_prefix='/admin')

    @bp.get("/description/")
    @require_admin
    async def calendar_description_edit(calendar_slug: str, **kwargs):
        from sxc.pages.renders import render_calendar_description_edit
        html = render_calendar_description_edit(g.calendar)
        return sx_response(html)


    @bp.post("/description/")
    @require_admin
    @clear_cache(tag="calendars", tag_scope="all")
    async def calendar_description_save(calendar_slug: str, **kwargs):
        form = await request.form
        description = (form.get("description") or "").strip() or None

        # simple inline update, or call a service if you prefer
        g.calendar.description = description
        await g.s.flush()

        from sxc.pages.renders import render_calendar_description
        html = render_calendar_description(g.calendar, oob=True)
        return sx_response(html)


    @bp.get("/description/view/")
    @require_admin
    async def calendar_description_view(calendar_slug: str, **kwargs):
        from sxc.pages.renders import render_calendar_description
        html = render_calendar_description(g.calendar)
        return sx_response(html)
    
    return bp
