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"""
{rows_html}
#๐Ÿฅ’ Pickle Brand โญ Overall ๐Ÿ”Š Crunch ๐Ÿ˜ฌ Sour ๐Ÿง„ Garlic ๐Ÿ›’ Buy? Reviews
""" 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 ""}

{rows_html}
๐Ÿฅ’ Pickle Brand โญ Overall ๐Ÿ”Š Crunch ๐Ÿ˜ฌ Sour ๐Ÿง„ Garlic ๐Ÿ›’ Buy? Reviews
""" 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['pickle_name']} {brand_html}
{r['date']}
โญ {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}
'