from __future__ import annotations

from sqlalchemy import func, select
from sqlalchemy.ext.asyncio import AsyncSession

from app.models import Category, Product

MENU: list[tuple[str, str, list[tuple[str, str, int]]]] = [
    (
        "Бургери",
        "🍔",
        [
            ("Класичний бургер", "Яловичина, салат, томат, фірмовий соус", 189),
            ("Чізбургер", "Яловичина, чедер, маринований огірок", 209),
            ("Подвійний", "Дві котлети і подвійний чедер", 259),
            ("BBQ бургер", "Яловичина, бекон, цибуля, соус BBQ", 239),
        ],
    ),
    (
        "Снеки",
        "🍟",
        [
            ("Картопля фрі", "Хрустка, з сіллю", 69),
            ("Картопля по-селянськи", "З часниковим соусом", 89),
            ("Нагетси 6 шт", "Курячі, паніровка", 95),
            ("Цибулеві кільця", "Порція з соусом", 79),
        ],
    ),
    (
        "Напої",
        "🥤",
        [
            ("Кола 0,33", "Охолоджена", 45),
            ("Лимонад домашній", "Цитрус і м'ята", 59),
            ("Молочний коктейль", "Ваніль", 85),
            ("Американо", "Еспресо з водою", 45),
        ],
    ),
    (
        "Соуси",
        "🥫",
        [
            ("Сирний", "До снеків і бургерів", 25),
            ("Часниковий", "Фірмовий", 25),
            ("Соус BBQ", "Копчений", 25),
        ],
    ),
]


async def seed_if_empty(session: AsyncSession) -> None:
    count = await session.scalar(select(func.count()).select_from(Category))
    if count:
        return
    for cat_index, (title, emoji, products) in enumerate(MENU):
        category = Category(title=title, emoji=emoji, sort_order=cat_index, is_active=True)
        session.add(category)
        await session.flush()
        for product_index, (name, description, price) in enumerate(products):
            session.add(
                Product(
                    category_id=category.id,
                    title=name,
                    description=description,
                    price=price * 100,
                    sort_order=product_index,
                    is_active=True,
                )
            )
    await session.flush()
