# modules/studentact/current_situation_interface.py import streamlit as st import logging from ..utils.widget_utils import generate_unique_key logger = logging.getLogger(__name__) def display_current_situation_interface(lang_code, nlp_models, t): """ Interfaz modular para el análisis de la situación actual del estudiante. Esta función maneja la presentación y la interacción con el usuario. Args: lang_code: Código del idioma actual nlp_models: Diccionario de modelos de spaCy cargados t: Diccionario de traducciones """ try: st.markdown("## Mi Situación Actual de Escritura") # Container principal para mejor organización visual with st.container(): # Columnas para entrada y visualización text_col, visual_col = st.columns([1,2]) with text_col: # Área de entrada de texto text_input = st.text_area( t.get('current_situation_input', "Ingresa tu texto para analizar:"), height=400, key=generate_unique_key("current_situation", "input") ) # Botón de análisis if st.button( t.get('analyze_button', "Explorar mi escritura"), type="primary", disabled=not text_input, key=generate_unique_key("current_situation", "analyze") ): with st.spinner(t.get('processing', "Analizando texto...")): try: # 1. Procesar el texto doc = nlp_models[lang_code](text_input) metrics = analyze_text_dimensions(doc) # 2. Mostrar visualizaciones en la columna derecha with visual_col: from .current_situation_analysis import display_current_situation_visual display_current_situation_visual(doc, metrics) # 3. Obtener retroalimentación de Claude feedback = get_claude_feedback(metrics, text_input) # 4. Guardar los resultados from ..database.current_situation_mongo_db import store_current_situation_result if store_current_situation_result( st.session_state.username, text_input, metrics, feedback ): st.success(t.get('save_success', "Análisis guardado exitosamente")) # 5. Mostrar recomendaciones show_recommendations(feedback, t) except Exception as e: logger.error(f"Error en análisis de situación actual: {str(e)}") st.error(t.get('analysis_error', "Error al procesar el análisis")) def show_recommendations(feedback, t): st.markdown("### " + t.get('recommendations_title', "Recomendaciones para mejorar")) for area, exercises in feedback['recommendations'].items(): with st.expander(f"💡 {area}"): st.markdown(exercises['description']) st.markdown("**Ejercicio sugerido:**") st.markdown(exercises['activity']) # Botón para marcar ejercicio como completado if st.button( t.get('mark_complete', "Marcar como completado"), key=generate_unique_key("exercise", area) ): update_exercise_status( st.session_state.username, area, exercises['activity'] )