import json import os from utils.utils import get_aversion_color, get_qualitative_aversion RESOURCE_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "resources") with open(os.path.join(RESOURCE_DIR, "aversions.json"), "r") as f: aversions_data = json.load(f) AVERSIONS = {item["Name"]: item for item in aversions_data} def create_poi_html(poi: dict, user_id: str) -> str: """Create HTML representation of a POI with sensory features""" html = f"""
{poi[

{poi["name:token_seq"]}

Descrizione: {poi["description:token_seq"]}

Luogo: {poi["address:token_seq"]}

Caratteristiche Sensoriali:

""" for feature, level in poi["sensory_features:token"].items(): icon = AVERSIONS[feature]["Icon"] bar_color = get_aversion_color(level, AVERSIONS[feature]["Type"]) html += f""" """ html += f"""
Caratteristica Livello (1-5)
{icon} {feature}
{level}
Basso Alto

Spiegazione della raccomandazione: ti suggeriamo questo luogo perchΓ© ...

{poi["explanation"]}

""" return html def create_recommendation_item(rec, index, selected=False) -> str: """Create HTML for a single recommendation item""" poi_category = ' - '.join(rec["category:token_seq"]).replace('_', ' ') return f"""
{rec[

{rec["name:token_seq"]}

{rec["description:token_seq"] or ''}

{'🏷️ ' + poi_category if poi_category else ''}

{"βœ“" if selected else ""}
""" def create_poi_card_selectable(poi: dict, is_selected: bool = False) -> str: """Create HTML representation of a selectable POI card for search interface""" # Enhanced visual feedback based on selection state if is_selected: border_color = "#30892F" background_color = "#f0f8f0" # Slightly darker green tint tick_icon = "βœ“" # Dark overlay for selected state overlay_style = "background-color: rgba(0, 0, 0, 0.15);" # Darker content background content_bg = "#e8f5e8" # Darker text colors for selected state title_color = "#2c5530" location_color = "#4a5c4d" category_color = "#5a6b5d" else: border_color = "#ddd" background_color = "white" tick_icon = "" overlay_style = "" content_bg = "white" title_color = "#333" location_color = "#666" category_color = "#777" # Create compact sensory features display sensory_html = "" if poi.get("sensory_features"): sensory_items = [] for feature, level in poi["sensory_features"].items(): icon = AVERSIONS[feature]["Icon"] color = get_aversion_color(level, AVERSIONS[feature]["Type"]) qualitative_level = get_qualitative_aversion( level, AVERSIONS[feature]["Type"] ) qualitative_level = {"GOOD": "Basso", "ACCEPTABLE": "Medio", "BAD": "Alto"}[ qualitative_level ] sensory_items.append( f'{icon} {feature}: {qualitative_level}' ) sensory_html = f"""
Caratteristiche Sensoriali:
""" # Escape single quotes in POI name for JavaScript poi_id_escaped = poi["poi_id:token"].replace(" ", "-").replace("'", "").replace('"', "") poi_category = ' - '.join(poi["category:token_seq"]).replace('_', ' ') html = f"""
{tick_icon}
{poi[

{poi["name:token_seq"]}

πŸ“ {poi["address:token_seq"]}

{'🏷️ ' + poi_category if poi_category else ''}

{sensory_html}
{("βœ“ Selezionato" if is_selected else "Clicca per selezionare")}
""" return html def create_poi_cards_list(pois: list, selected_pois: set) -> str: if not pois: return "

πŸ” Nessun punto di interesse trovato

Prova con termini di ricerca diversi

" # Genera HTML per i POI filtrati poi_cards_html = [] for poi in pois: is_selected = (poi.get("poi_id:token"), poi.get("name:token_seq")) in selected_pois card_html = create_poi_card_selectable(poi, is_selected) poi_cards_html.append(card_html) html = f"""
{"".join(poi_cards_html)}
Trovati {len(pois)} punti di interesse β€’ {len(selected_pois)} selezionati
""" return html