from __future__ import annotations

from sqlalchemy.ext.asyncio import AsyncSession

from app.models import Setting

DEFAULTS: dict[str, str] = {
    "restaurant_name": "Burger Bar",
    "welcome_text": "Вітаємо у {restaurant}! 🍔\n\nОберіть дію кнопками нижче.",
    "address": "",
    "phone": "",
    "hours": "12:00–22:00",
    "delivery_note": "Доставка по місту. Оплату узгодьте з курʼєром.",
    "group_chat_id": "",
}


async def load_settings(session: AsyncSession) -> dict[str, str]:
    data = dict(DEFAULTS)
    rows = (await session.scalars(select_settings())).all()
    for row in rows:
        data[row.key] = row.value
    return data


def select_settings():
    from sqlalchemy import select

    return select(Setting)


async def ensure_settings(session: AsyncSession, group_chat_id: str = "") -> None:
    for key, value in DEFAULTS.items():
        row = await session.get(Setting, key)
        if row is None:
            session.add(Setting(key=key, value=value))
            continue
        current = (row.value or "").lower()
        if key in {"welcome_text", "delivery_note"} and ("промокод" in current or "{code}" in current):
            row.value = value
    if group_chat_id:
        row = await session.get(Setting, "group_chat_id")
        if row is not None and not (row.value or "").strip():
            row.value = group_chat_id
    await session.flush()


async def set_setting(session: AsyncSession, key: str, value: str) -> None:
    row = await session.get(Setting, key)
    if row is None:
        session.add(Setting(key=key, value=value))
    else:
        row.value = value
