"""Per-tenant SMS templates with safe Bosnian defaults (§5.5). Tenant overrides live in tenants.sms_templates (only overridden keys stored). Placeholders are .format()-style; unknown placeholders are left intact. """ from __future__ import annotations from gogo.models import Tenant DEFAULT_TEMPLATES: dict[str, str] = { "missed_call": ( "Poštovani, dobili ste {salon}. Možete zakazati i putem poruke ili chata: {link}. " "Nazvaćemo vas ili nas pozovite ponovo." ), "request_received": ( "Primili smo vaš zahtjev za termin. Javićemo vam potvrdu u najkraćem roku. — {salon}" ), "confirmation": "Potvrđen termin: {usluga}, {dan} {datum} u {vrijeme}h — {salon}.", "rejection": "{salon}: nažalost traženi termin nije moguć. Molimo pozovite nas da dogovorimo drugi.", "expiry": ( "{salon}: nismo uspjeli potvrditi vaš zahtjev za termin. " "Molimo pozovite nas ponovo da dogovorimo termin." ), } class _SafeDict(dict): def __missing__(self, key: str) -> str: return "{" + key + "}" def render_sms(tenant: Tenant, kind: str, **params: str) -> str: templates = {**DEFAULT_TEMPLATES, **(tenant.sms_templates or {})} template = templates[kind] params.setdefault("salon", tenant.name) return template.format_map(_SafeDict(params))