import streamlit as st from streamlit_local_storage import LocalStorage from database import init_supabase from utils import apply_filters, apply_sort from locales import load_locale, lang_codes from data_loader import load_data, get_unique_mood, get_unique_tags from ui_components import render_sidebar, render_main_content, load_css DEFAULT_LANG = "en" # Настройки страницы st.set_page_config(layout="wide", page_icon="🧙", page_title="Fantasy Characters Explorer") localS = LocalStorage() # Загрузка данных database = init_supabase() df = load_data() st.session_state.lang = localS.getItem("lang") all_langs = lang_codes() if st.session_state.lang not in all_langs: st.session_state.lang = (st.context.locale.split("-", 1)[0] if st.context.locale else DEFAULT_LANG) localS.setItem("lang", st.session_state.lang) locale = load_locale(st.session_state.lang) if 'rated' not in st.session_state: st.session_state.rated = localS.getItem("rated") if st.session_state.rated is None: st.session_state.rated = [] # Загрузка стилей st.markdown(f"", unsafe_allow_html=True) # Получение уникальных значений для фильтров moods = [locale['filter_all']] + get_unique_mood(df) all_tags = get_unique_tags(df) # Рендеринг сайдбара с фильтрами selected_filters = render_sidebar(localS, locale, all_langs, moods, all_tags) # Применение фильтров filtered_df = apply_filters( locale, df=df, search_query=selected_filters['search_query'], absurdity_range=selected_filters['absurdity_range'], selected_mood=selected_filters['selected_mood'], selected_tags=selected_filters['selected_tags'] ) sorted_df = apply_sort(locale, filtered_df, selected_filters['sort_option']) # Основной контент render_main_content(locale, database, localS, sorted_df)