from db import _query_leaderboard, _query_pickle_profiles, get_recent_reviews_df
def _score_bar(val):
pct = int((float(val) / 10) * 100)
color = "var(--score-good)" if float(val) >= 7 else "var(--score-warn)" if float(val) >= 4 else "var(--score-bad)"
return (
f''
f''
f''
f'{val}'
f''
)
def _buy_badge(pct):
pct = int(pct) if pct is not None else 0
state = "good" if pct >= 70 else "warn" if pct >= 40 else "bad"
return f'{pct}%'
_LB_EMPTY = """
๐ฅ
No pickles ranked yet!
Be the first to rate a pickle and claim the top spot. ๐
"""
def get_leaderboard_html(sort_by="โญ Overall"):
df = _query_leaderboard(sort_by)
if df.empty:
return _LB_EMPTY
medals = {1: "๐ฅ", 2: "๐ฅ", 3: "๐ฅ"}
row_classes = {1: "rank-gold", 2: "rank-silver", 3: "rank-bronze"}
rows_html = ""
for _, row in df.iterrows():
rank = int(row["rank"])
medal = medals.get(rank, f'{rank}')
row_cls = row_classes.get(rank, "")
n = int(row["review_count"])
buy_pct = int(row.get("buy_again_pct", 0) or 0)
rows_html += f"""
| {medal} |
{row['pickle_name']} |
{row['brand']} |
{_score_bar(row['avg_overall'])} |
{_score_bar(row['avg_crunch'])} |
{_score_bar(row['avg_sour'])} |
{_score_bar(row['avg_garlic'])} |
{_buy_badge(buy_pct)} |
{n} {"review" if n == 1 else "reviews"} |
"""
return f"""
| # | ๐ฅ Pickle |
Brand |
โญ Overall |
๐ Crunch |
๐ฌ Sour |
๐ง Garlic |
๐ Buy? |
Reviews |
{rows_html}
"""
def search_pickles(name_query="", brand_query=""):
name_q = (name_query or "").strip()
brand_q = (brand_query or "").strip()
if not name_q and not brand_q:
return """
๐
Type a pickle name or brand above to search.
"""
df = _query_pickle_profiles(name_filter=name_q, brand_filter=brand_q)
if df.empty:
return """
๐คท
No pickles matched. Try a different name or brand.
"""
count = len(df)
rows_html = ""
for _, row in df.iterrows():
n = int(row["review_count"])
buy_pct = int(row.get("buy_again_pct", 0) or 0)
rows_html += f"""
| {row['pickle_name']} |
{row['brand']} |
{_score_bar(row['avg_overall'])} |
{_score_bar(row['avg_crunch'])} |
{_score_bar(row['avg_sour'])} |
{_score_bar(row['avg_garlic'])} |
{_buy_badge(buy_pct)} |
{n} {"review" if n == 1 else "reviews"} |
"""
return f"""
{count} result{"s" if count != 1 else ""}
| ๐ฅ Pickle |
Brand |
โญ Overall |
๐ Crunch |
๐ฌ Sour |
๐ง Garlic |
๐ Buy? |
Reviews |
{rows_html}
"""
def get_recent_html():
df = get_recent_reviews_df()
if df.empty:
return """
๐ฅ
No reviews yet โ go rate some pickles!
"""
cards = ""
for _, r in df.iterrows():
brand_clean = str(r["brand"]).strip()
brand_html = (
f'ยท {brand_clean}'
if brand_clean and brand_clean not in ("", "โ") else ""
)
body_html = (
f'"{r["review_text"]}"
'
if str(r.get("review_text", "")).strip() else ""
)
spicy = int(r.get("spiciness", 5) or 5)
buy_val = int(r.get("buy_again", 1) or 1)
buy_badge = (
'๐ Buy Again'
if buy_val else
'๐ Pass'
)
cards += f"""
โญ {r['overall']}
๐ {r['crunchiness']}
๐ฌ {r['sourness']}
๐ง {r['garlic']}
๐ถ๏ธ {spicy}
{buy_badge}
{body_html}
"""
return f'{cards}
'
def get_analytics_html():
total, total_pickles, highest, most_rev, avg_crunch, avg_sour, avg_garlic, buy_pct = (
__import__("db").get_analytics()
)
if total == 0:
return """
๐
No data yet!
Submit some pickle reviews to see analytics here.
"""
buy_color = "var(--positive-text)" if buy_pct >= 70 else "var(--warning-text)" if buy_pct >= 40 else "var(--danger-text)"
def _card(icon, value, label, color="var(--stat-value)"):
return (
f''
f'
{icon}
'
f'
{value}
'
f'
{label}
'
f'
'
)
cards = (
_card("๐", total, "Total Reviews")
+ _card("๐ฅ", total_pickles, "Unique Pickles")
+ _card("๐", highest, "Highest Rated")
+ _card("๐", most_rev, "Most Reviewed")
+ _card("๐", f"{avg_crunch}/10", "Avg Crunchiness")
+ _card("๐ฌ", f"{avg_sour}/10", "Avg Sourness")
+ _card("๐ง", f"{avg_garlic}/10", "Avg Garlic")
+ _card("๐", f"{int(buy_pct)}%", "Buy Again", buy_color)
)
return f'{cards}
'