namespace Meezi.Core.Discover;

/// <summary>
/// Café attributes for discover / AI matching (stored as JSON on <see cref="Entities.Cafe.DiscoverProfileJson"/>).
/// </summary>
public class CafeDiscoverProfile
{
    /// <summary>Decor / concept themes (multi): modern, vintage, plants-heavy, …</summary>
    public List<string> Themes { get; set; } = [];

    /// <summary>Physical scale: tiny, cozy, medium, large, spacious.</summary>
    public string? Size { get; set; }

    /// <summary>Floor count: one, two, three, multi.</summary>
    public string? Floors { get; set; }

    /// <summary>Atmosphere tags (multi).</summary>
    public List<string> Vibes { get; set; } = [];

    /// <summary>Good for: date, family, friends, finding_someone, etc. (multi).</summary>
    public List<string> Occasions { get; set; } = [];

    /// <summary>indoor, outdoor, plants, terrace, … (multi).</summary>
    public List<string> SpaceFeatures { get; set; } = [];

    /// <summary>quiet, moderate, lively.</summary>
    public string? NoiseLevel { get; set; }

    /// <summary>budget, mid, premium.</summary>
    public string? PriceTier { get; set; }
}

public static class CafeDiscoverProfileKeys
{
    public static readonly HashSet<string> Themes =
    [
        "modern", "minimal", "vintage", "industrial", "scandi", "persian_traditional",
        "book_cafe", "roastery", "dessert_focus", "brunch", "late_night",
        "plants_heavy", "instagrammable", "heritage", "luxury",
        // extended
        "specialty_coffee", "tea_house", "art_gallery", "sport_cafe", "gaming_cafe"
    ];

    public static readonly HashSet<string> Sizes =
        ["tiny", "cozy", "medium", "large", "spacious"];

    public static readonly HashSet<string> Floors =
        ["one", "two", "three", "multi"];

    public static readonly HashSet<string> Vibes =
    [
        "quiet", "lively", "romantic", "cozy", "trendy", "traditional",
        "artistic", "luxury", "casual", "study_friendly"
    ];

    public static readonly HashSet<string> Occasions =
    [
        "date", "family", "friends", "finding_someone", "solo",
        "business_meeting", "study_work", "celebration",
        "quick_coffee", "breakfast", "brunch",
        // extended
        "after_dinner", "group_large"
    ];

    public static readonly HashSet<string> SpaceFeatures =
    [
        "indoor", "outdoor", "terrace", "rooftop", "garden", "plants",
        "wifi", "parking", "wheelchair", "kids_friendly", "pet_friendly",
        "smoking_area", "live_music", "private_room", "counter_only",
        // extended
        "takeaway", "hookah", "board_games", "no_smoking", "prayer_room"
    ];

    public static readonly HashSet<string> NoiseLevels = ["quiet", "moderate", "lively"];
    public static readonly HashSet<string> PriceTiers = ["budget", "mid", "premium"];
}
