from wagtail.models import Locale, Page, Site

from .i18n import normalize_language, ui_for
from .models import ContentPage, EditableText, HeaderSlide, MenuItem, OfficeSettings


def site_context(request):
    site = getattr(request, "site", None) or Site.find_for_request(request)
    if not site:
        return {"csp_nonce": getattr(request, "csp_nonce", "")}
    request.site = site
    language = normalize_language(getattr(request, "LANGUAGE_CODE", "sl"))
    root_page = site.root_page.specific
    try:
        locale = Locale.objects.get(language_code=language)
        localized_home = root_page.get_translation(locale).specific
    except (Locale.DoesNotExist, Page.DoesNotExist):
        localized_home = root_page
    office = OfficeSettings.for_site(site)
    legal_aid_page = ContentPage.objects.child_of(localized_home).filter(
        page_kind="legal_aid", live=True,
    ).first()
    ui = ui_for(language).copy()
    for editable_text in EditableText.objects.all():
        value = editable_text.localized_text(language)
        if value:
            ui[editable_text.key] = value
    menu_items = []
    for menu_item in MenuItem.objects.filter(active=True):
        if menu_item.anchor == "bpp" and legal_aid_page is None:
            continue
        menu_items.append({
            "anchor": menu_item.anchor,
            "label": menu_item.localized_label(language),
        })
    return {
        "office": office,
        "localized_home": localized_home,
        "office_hours_localized": office.localized("office_hours", language),
        "footer_badge_text_localized": office.localized("footer_badge_text", language),
        "legal_aid_page": legal_aid_page,
        "ui": ui,
        "menu_items": menu_items,
        "header_slides": HeaderSlide.objects.filter(active=True).select_related("image"),
        "csp_nonce": getattr(request, "csp_nonce", ""),
    }
