|  |  | 
					
						
						|  | import streamlit as st | 
					
						
						|  | from typing import List, Dict | 
					
						
						|  | from config import Config | 
					
						
						|  | from chat_state import ChatState | 
					
						
						|  | from chat_manager import ChatManager | 
					
						
						|  | from chat_service import ChatService | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | class UIComponents: | 
					
						
						|  | @staticmethod | 
					
						
						|  | def setup_page(config: Config) -> None: | 
					
						
						|  | st.set_page_config(**config.PAGE_CONFIG) | 
					
						
						|  | st.markdown(config.STYLES, unsafe_allow_html=True) | 
					
						
						|  |  | 
					
						
						|  | @staticmethod | 
					
						
						|  | def render_header() -> None: | 
					
						
						|  | st.markdown( | 
					
						
						|  | '<h1 style="color: black;">المرشد التعليمي الذكي 🤖</h1>', | 
					
						
						|  | unsafe_allow_html=True, | 
					
						
						|  | ) | 
					
						
						|  |  | 
					
						
						|  | @staticmethod | 
					
						
						|  | def render_footer() -> None: | 
					
						
						|  | st.markdown( | 
					
						
						|  | """ | 
					
						
						|  | <div class="footer"> | 
					
						
						|  | .هذا روبوت تعليمي ذكي وقد تختلف إجاباته في كل مرة. يرجى استخدامه كدليل أولي فقط | 
					
						
						|  | </div> | 
					
						
						|  | """, | 
					
						
						|  | unsafe_allow_html=True, | 
					
						
						|  | ) | 
					
						
						|  |  | 
					
						
						|  | @staticmethod | 
					
						
						|  | def render_sidebar( | 
					
						
						|  | chat_state: ChatState, chat_manager: ChatManager, chat_service: ChatService | 
					
						
						|  | ) -> None: | 
					
						
						|  | with st.sidebar: | 
					
						
						|  | st.title("إدارة المحادثات") | 
					
						
						|  |  | 
					
						
						|  | if st.button("محادثة جديدة 🆕"): | 
					
						
						|  | chat_state.temp_chat = chat_manager.create_new_chat() | 
					
						
						|  | chat_state.current_chat_id = None | 
					
						
						|  |  | 
					
						
						|  | chat_ids = list(chat_state.chat_history.keys()) | 
					
						
						|  | if chat_ids: | 
					
						
						|  | chat_options = { | 
					
						
						|  | id: chat_service.get_chat_preview(chat_state.chat_history[id]) | 
					
						
						|  | for id in chat_ids | 
					
						
						|  | } | 
					
						
						|  | chat_options["new"] = "محادثة جديدة 🆕" | 
					
						
						|  |  | 
					
						
						|  | selected_chat = st.selectbox( | 
					
						
						|  | "اختر محادثة 📚", | 
					
						
						|  | options=list(chat_options.keys()), | 
					
						
						|  | format_func=lambda x: chat_options[x], | 
					
						
						|  | index=( | 
					
						
						|  | len(chat_options) - 1 | 
					
						
						|  | if chat_state.current_chat_id is None | 
					
						
						|  | else chat_ids.index(chat_state.current_chat_id) | 
					
						
						|  | ), | 
					
						
						|  | ) | 
					
						
						|  |  | 
					
						
						|  | if selected_chat == "new": | 
					
						
						|  | chat_state.temp_chat = chat_manager.create_new_chat() | 
					
						
						|  | chat_state.current_chat_id = None | 
					
						
						|  | elif selected_chat != chat_state.current_chat_id: | 
					
						
						|  | chat_state.current_chat_id = selected_chat | 
					
						
						|  | chat_state.temp_chat = None | 
					
						
						|  |  | 
					
						
						|  | if chat_state.current_chat_id: | 
					
						
						|  | if st.button("حذف المحادثة الحالية 🗑️"): | 
					
						
						|  | chat_state.delete_chat_id = chat_state.current_chat_id | 
					
						
						|  |  | 
					
						
						|  | if chat_state.delete_chat_id: | 
					
						
						|  | chat_manager.delete_chat(chat_state.delete_chat_id, chat_state) | 
					
						
						|  |  |