File size: 4,240 Bytes
ef45bdf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# 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):
    """
    Muestra las recomendaciones y ejercicios sugeridos.
    """
    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']
                )