namespace Meezi.Infrastructure.Data;

/// <summary>
/// Café demo menu aligned with Kaggle Food-101 class names (see Food101ImageFallbacks + data/menu-image-manifest.json).
/// </summary>
public static class DemoMenuCatalog
{
    public sealed record CategorySeed(
        string Id,
        string Name,
        string NameEn,
        string? NameAr,
        int SortOrder,
        string? Icon = null,
        string? IconPresetId = null,
        string? IconStyle = "flat");

    public sealed record ItemSeed(
        string Id,
        string CategoryId,
        string Name,
        string NameEn,
        string? NameAr,
        string? Description,
        decimal PriceToman,
        decimal DiscountPercent,
        string Food101Class);

    private static string Img(string itemId, string food101Class)
    {
        var kind = DemoMenuCategoryKinds.KindFor(itemId, food101Class);
        var local = MenuImageManifest.GetLocalImageOverride(itemId);
        if (!string.IsNullOrWhiteSpace(local))
            return local;
        return Food101ImageFallbacks.Resolve(food101Class, kind);
    }

    public static IReadOnlyList<CategorySeed> Categories { get; } =
    [
        new("cat_demo_coffee", "قهوه تخصصی", "Specialty Coffee", "قهوة متخصصة", 0, IconPresetId: "drinks-hot"),
        new("cat_demo_drinks", "نوشیدنی گرم", "Hot drinks", "مشروبات ساخنة", 1, IconPresetId: "drinks-hot"),
        new("cat_demo_cold", "نوشیدنی سرد", "Cold drinks", "مشروبات باردة", 2, IconPresetId: "drinks-cold"),
        new("cat_demo_breakfast", "صبحانه", "Breakfast", "فطور", 3, IconPresetId: "breakfast"),
        new("cat_demo_food", "غذا و پیش‌غذا", "Food & snacks", "طعام", 4, IconPresetId: "food-mains"),
        new("cat_demo_pasta", "پاستا و پیتزا", "Pasta & pizza", "معكرونة وبيتزا", 5, IconPresetId: "pasta-pizza"),
        new("cat_demo_dessert", "دسر", "Desserts", "حلويات", 6, IconPresetId: "dessert"),
    ];

    public static IReadOnlyList<ItemSeed> Items { get; } =
    [
        // ── Specialty Coffee (20 items) ──────────────────────────────────────
        new("item_demo_cf_espresso",      "cat_demo_coffee", "اسپرسو",             "Espresso",           "إسبريسو",        "دوبل شات، تازه آسیاب",        65_000,  0, "espresso"),
        new("item_demo_cf_doppio",        "cat_demo_coffee", "دوپیو",              "Doppio",             "دوبيو",          "دو شات اسپرسو",               80_000,  0, "espresso"),
        new("item_demo_cf_ristretto",     "cat_demo_coffee", "ریسترتو",            "Ristretto",          "ريستريتو",       "کوتاه و غلیظ",                75_000,  0, "espresso"),
        new("item_demo_cf_lungo",         "cat_demo_coffee", "لونگو",              "Lungo",              "لونغو",          "اسپرسو کشیده",                70_000,  0, "espresso"),
        new("item_demo_cf_americano",     "cat_demo_coffee", "آمریکانو",           "Americano",          "أمريكانو",       "اسپرسو و آب داغ",             75_000,  0, "cappuccino"),
        new("item_demo_cf_cappuccino",    "cat_demo_coffee", "کاپوچینو",           "Cappuccino",         "كابتشينو",       "شیر بخار و فوم",             110_000, 10, "cappuccino"),
        new("item_demo_cf_latte",         "cat_demo_coffee", "لاته",               "Latte",              "لاتيه",          "شیر بخار گرفته",             120_000,  0, "latte"),
        new("item_demo_cf_flat_white",    "cat_demo_coffee", "فلت وایت",           "Flat White",         "فلات وايت",      "میکرو فوم نرم",              115_000,  0, "latte"),
        new("item_demo_cf_cortado",       "cat_demo_coffee", "کورتادو",            "Cortado",            "كورتادو",        "نسبت مساوی قهوه و شیر",       95_000,  0, "espresso"),
        new("item_demo_cf_macchiato",     "cat_demo_coffee", "ماکیاتو",            "Macchiato",          "ماكياتو",        "اسپرسو با کمی فوم",           90_000,  0, "cappuccino"),
        new("item_demo_cf_mocha",         "cat_demo_coffee", "موکا",               "Mocha",              "موكا",           "شکلات تلخ و اسپرسو",         135_000,  0, "mocha"),
        new("item_demo_cf_affogato",      "cat_demo_coffee", "افوگاتو",            "Affogato",           "أفوغاتو",        "اسپرسو روی بستنی وانیل",     140_000,  0, "espresso"),
        new("item_demo_cf_cold_brew",     "cat_demo_coffee", "کولد برو",           "Cold Brew",          "كولد برو",       "دم ۱۲ ساعته",               140_000,  0, "iced_coffee"),
        new("item_demo_cf_iced_latte",    "cat_demo_coffee", "آیس لاته",           "Iced Latte",         "آيس لاتيه",      "سرد و خنک",                  130_000,  0, "iced_coffee"),
        new("item_demo_cf_iced_ameri",    "cat_demo_coffee", "آیس آمریکانو",       "Iced Americano",     "آيس أمريكانو",   null,                          95_000,  0, "iced_coffee"),
        new("item_demo_cf_nitro",         "cat_demo_coffee", "نیترو کافی",         "Nitro Cold Brew",    "نيترو كافي",     "با نیتروژن کربن‌دار",        155_000,  0, "iced_coffee"),
        new("item_demo_cf_v60",           "cat_demo_coffee", "V60",                "Pour Over V60",      "في 60",          "دم‌آوری دستی",               145_000,  0, "espresso"),
        new("item_demo_cf_aeropress",     "cat_demo_coffee", "ایروپرس",            "AeroPress",          "إيروبريس",       "طعم نرم و کامل",             140_000,  0, "espresso"),
        new("item_demo_cf_turkish",       "cat_demo_coffee", "قهوه ترک",           "Turkish Coffee",     "قهوة تركية",     "سنتی با هل",                  80_000,  0, "espresso"),
        new("item_demo_cf_specialty",     "cat_demo_coffee", "قهوه تک‌خاستگاه",   "Single Origin",      "أحادي المنشأ",   "هر هفته از منشأ جدید",       165_000,  0, "espresso"),

        // Hot drinks
        new("item_demo_espresso", "cat_demo_drinks", "اسپرسو", "Espresso", "إسبريسو", "دوبل یا سینگل", 65_000, 0, "espresso"),
        new("item_demo_americano", "cat_demo_drinks", "آمریکانو", "Americano", "أمريكانو", null, 75_000, 0, "cappuccino"),
        new("item_demo_latte", "cat_demo_drinks", "لاته", "Latte", "لاتيه", "شیر بخار گرفته", 120_000, 0, "latte"),
        new("item_demo_cappuccino", "cat_demo_drinks", "کاپوچینو", "Cappuccino", "كابتشينو", null, 110_000, 10, "cappuccino"),
        new("item_demo_mocha", "cat_demo_drinks", "موکا", "Mocha", "موكا", "شکلات و قهوه", 135_000, 0, "mocha"),
        new("item_demo_tea", "cat_demo_drinks", "چای ماسالا", "Masala tea", "شاي ماسالا", null, 85_000, 0, "miso_soup"),

        // Cold drinks
        new("item_demo_iced_latte", "cat_demo_cold", "آیس لاته", "Iced latte", "آيس لاتيه", null, 130_000, 0, "iced_coffee"),
        new("item_demo_cold_brew", "cat_demo_cold", "کولد برو", "Cold brew", "كولد برو", null, 140_000, 0, "iced_coffee"),
        new("item_demo_lemonade", "cat_demo_cold", "لیموناد", "Lemonade", "ليمونادة", "تازه", 95_000, 0, "lemonade"),
        new("item_demo_smoothie", "cat_demo_cold", "اسموتی توت", "Berry smoothie", "سموذي", null, 150_000, 15, "smoothie"),

        // Breakfast
        new("item_demo_croissant", "cat_demo_breakfast", "کروسان", "Croissant", "كرواسان", "کره‌ای", 75_000, 0, "croque_madame"),
        new("item_demo_omelette", "cat_demo_breakfast", "املت", "Omelette", "أومليت", "نان سنگک", 145_000, 0, "omelette"),
        new("item_demo_avocado", "cat_demo_breakfast", "توست آووکادو", "Avocado toast", "توست أفوكادو", null, 185_000, 0, "avocado_toast"),
        new("item_demo_pancakes", "cat_demo_breakfast", "پنکیک", "Pancakes", "فطائر", "عسل و کره", 165_000, 0, "pancakes"),
        new("item_demo_waffles", "cat_demo_breakfast", "وافل", "Waffles", "وافل", null, 175_000, 0, "waffles"),
        new("item_demo_french_toast", "cat_demo_breakfast", "فرنچ تست", "French toast", "توست فرنسي", null, 155_000, 0, "french_toast"),
        new("item_demo_eggs_benedict", "cat_demo_breakfast", "اگ بندیکت", "Eggs Benedict", "بيض بنديكت", null, 195_000, 0, "eggs_benedict"),

        // Food & snacks
        new("item_demo_sandwich", "cat_demo_food", "ساندویچ مرغ", "Chicken sandwich", "ساندويتش دجاج", null, 195_000, 0, "club_sandwich"),
        new("item_demo_salad", "cat_demo_food", "سالاد سزار", "Caesar salad", "سلطة سيزر", null, 175_000, 0, "caesar_salad"),
        new("item_demo_greek_salad", "cat_demo_food", "سالاد یونانی", "Greek salad", "سلطة يونانية", null, 168_000, 0, "greek_salad"),
        new("item_demo_burger", "cat_demo_food", "همبرگر", "Burger", "برجر", "۱۵۰ گرم گوشت", 245_000, 0, "hamburger"),
        new("item_demo_steak", "cat_demo_food", "استیک", "Steak", "ستيك", "medium", 385_000, 0, "steak"),
        new("item_demo_salmon", "cat_demo_food", "سالمون گریل", "Grilled salmon", "سلمون مشوي", null, 320_000, 0, "grilled_salmon"),
        new("item_demo_tacos", "cat_demo_food", "تاکو", "Tacos", "تاكو", "سه عدد", 210_000, 0, "tacos"),
        new("item_demo_shawarma", "cat_demo_food", "شاورما", "Shawarma", "شاورما", null, 185_000, 0, "shawarma"),
        new("item_demo_falafel", "cat_demo_food", "فلافل", "Falafel", "فلافل", "۶ عدد", 125_000, 0, "falafel"),
        new("item_demo_hummus", "cat_demo_food", "حمص", "Hummus", "حمص", "نان پیتا", 95_000, 0, "hummus"),
        new("item_demo_fries", "cat_demo_food", "سیب‌زمینی سرخ‌کرده", "French fries", "بطاطس مقلية", null, 85_000, 0, "french_fries"),
        new("item_demo_spring_rolls", "cat_demo_food", "اسپرینگ رول", "Spring rolls", "سبرينغ رول", null, 115_000, 0, "spring_rolls"),
        new("item_demo_ramen", "cat_demo_food", "رامن", "Ramen", "رامن", null, 235_000, 0, "ramen"),
        new("item_demo_pho", "cat_demo_food", "فو", "Pho", "فو", null, 225_000, 0, "pho"),
        new("item_demo_sushi", "cat_demo_food", "سوشی", "Sushi", "سوشي", "۸ تکه", 290_000, 0, "sushi"),

        // Pasta & pizza
        new("item_demo_pasta", "cat_demo_pasta", "پاستا آلفردو", "Alfredo pasta", "باستا", null, 220_000, 0, "pasta_carbonara"),
        new("item_demo_carbonara", "cat_demo_pasta", "کاربونارا", "Carbonara", "كاربونارا", null, 228_000, 0, "spaghetti_carbonara"),
        new("item_demo_bolognese", "cat_demo_pasta", "بولونز", "Bolognese", "بولونيز", null, 215_000, 0, "spaghetti_bolognese"),
        new("item_demo_lasagna", "cat_demo_pasta", "لازانیا", "Lasagna", "لازانيا", null, 240_000, 0, "lasagna"),
        new("item_demo_gnocchi", "cat_demo_pasta", "نیوکی", "Gnocchi", "جنوكي", null, 232_000, 0, "gnocchi"),
        new("item_demo_pizza", "cat_demo_pasta", "پیتزا مارگاریتا", "Margherita pizza", "بيتزا", null, 265_000, 10, "pizza"),
        new("item_demo_risotto", "cat_demo_pasta", "ریزوتو قارچ", "Mushroom risotto", "ريزوتو", null, 238_000, 0, "mushroom_risotto"),

        // Desserts
        new("item_demo_cake", "cat_demo_dessert", "کیک شکلاتی", "Chocolate cake", "كيك شوكولاتة", "برشی", 95_000, 15, "chocolate_cake"),
        new("item_demo_cheesecake", "cat_demo_dessert", "چیزکیک", "Cheesecake", "تشيز كيك", null, 115_000, 0, "cheesecake"),
        new("item_demo_brownie", "cat_demo_dessert", "براونی", "Brownie", "براوني", "بستنی وانیلی", 105_000, 0, "brownie"),
        new("item_demo_icecream", "cat_demo_dessert", "بستنی", "Ice cream", "آيس كريم", "دو اسکوپ", 88_000, 0, "ice_cream"),
        new("item_demo_tiramisu", "cat_demo_dessert", "تیرامیسو", "Tiramisu", "تيراميسو", null, 125_000, 0, "tiramisu"),
        new("item_demo_donuts", "cat_demo_dessert", "دونات", "Donuts", "دونات", null, 78_000, 0, "donuts"),
        new("item_demo_churros", "cat_demo_dessert", "چوروس", "Churros", "تشورو", "شکلات", 92_000, 0, "churros"),
        new("item_demo_baklava", "cat_demo_dessert", "باقلوا", "Baklava", "بقلاوة", null, 98_000, 0, "baklava"),
        new("item_demo_creme_brulee", "cat_demo_dessert", "کرم بروله", "Crème brûlée", "كريم بروليه", null, 118_000, 0, "creme_brulee"),
    ];

    /// <summary>Resolved image URL for catalog seed (manifest → Food-101 fallback → category default).</summary>
    public static string ResolveItemImageUrl(ItemSeed item) =>
        Img(item.Id, item.Food101Class);
}

/// <summary>Maps item/category to drink vs food default images.</summary>
file static class DemoMenuCategoryKinds
{
    private static readonly HashSet<string> DrinkCategoryIds = new(StringComparer.Ordinal)
    {
        "cat_demo_drinks",
        "cat_demo_cold"
    };

    private static readonly HashSet<string> DrinkFood101Classes = new(StringComparer.OrdinalIgnoreCase)
    {
        "espresso", "latte", "cappuccino", "mocha", "iced_coffee", "lemonade", "smoothie", "miso_soup"
    };

    public static MenuItemVisualKind KindFor(string itemId, string food101Class)
    {
        // All specialty coffee items are drinks
        if (itemId.StartsWith("item_demo_cf_", StringComparison.Ordinal))
            return MenuItemVisualKind.Drink;

        if (itemId.Contains("demo_iced", StringComparison.Ordinal)
            || itemId.Contains("demo_cold", StringComparison.Ordinal)
            || itemId.Contains("demo_lemonade", StringComparison.Ordinal)
            || itemId.Contains("demo_smoothie", StringComparison.Ordinal)
            || itemId.Contains("demo_espresso", StringComparison.Ordinal)
            || itemId.Contains("demo_latte", StringComparison.Ordinal)
            || itemId.Contains("demo_cappuccino", StringComparison.Ordinal)
            || itemId.Contains("demo_mocha", StringComparison.Ordinal)
            || itemId.Contains("demo_americano", StringComparison.Ordinal)
            || itemId.Contains("demo_tea", StringComparison.Ordinal))
            return MenuItemVisualKind.Drink;

        if (DrinkFood101Classes.Contains(food101Class))
            return MenuItemVisualKind.Drink;

        return MenuItemVisualKind.Food;
    }
}
