File size: 3,135 Bytes
82a36a6
 
a962ffe
897c1d2
 
0759822
b7a713a
0759822
90cb4f4
fa1e621
9a6b7dc
2b2f0d1
897c1d2
e3f0784
00eef23
82a36a6
9a6b7dc
 
 
 
e4a1a2b
 
9a6b7dc
 
 
 
0759822
 
 
 
2b2f0d1
 
4f7c053
 
46dae9a
 
2b2f0d1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9a6b7dc
 
 
 
90cb4f4
c7dea7e
9a6b7dc
 
2b2f0d1
897c1d2
9a6b7dc
 
2b2f0d1
0759822
9a6b7dc
0759822
 
 
 
 
 
 
 
64656b5
0759822
2b2f0d1
0759822
 
 
 
 
9a6b7dc
 
 
 
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
from utils.loaders import load_data
from db.crud import read
import streamlit as st
import os
from dotenv import load_dotenv
from views.intro_screen import welcome_screen
from views.questions_screen import questions_screen
from views.continue_survey import continue_survey_screen
from css.layout import custom_css
st.set_page_config(layout="wide")


load_dotenv()
VALIDATION_CODE = os.getenv("VALIDATION_CODE")


def initialization():
    """Initialize session state variables."""
    if "current_index" not in st.session_state:
        st.session_state.current_index = 0
    if "username" not in st.session_state:
        st.session_state.username = None
    if "responses" not in st.session_state:
        st.session_state.responses = []
    if "completed" not in st.session_state:
        st.session_state.completed = False
    if "show_questions" not in st.session_state:
        st.session_state.show_questions = False
    if "survey_continued" not in st.session_state:
        st.session_state.survey_continued = None
    if "start_new_survey" not in st.session_state:
        st.session_state.start_new_survey = False
    if 'ratings' not in st.session_state:
        st.session_state.ratings = {}
    if 'previous_ratings' not in st.session_state:
        st.session_state.previous_ratings = {}


def exit_screen():
    """Display exit screen"""
    st.markdown("""
        <div class='exit-container'>
            <h1>Thank you for participating!</h1>
            <p>Your responses have been saved successfully.</p>
            <p>You can safely close this window or start a new survey.</p>
        </div>
    """, unsafe_allow_html=True)

    # if st.button("Resume Survey"):
    #     reset_survey()
    #     st.rerun()


def reset_survey():
    """Reset the survey state to start over."""
    st.session_state.responses = []
    st.session_state.completed = True
    st.session_state.start_new_survey = True


def ui():
    """Main function to control the survey flow."""
    custom_css()
    data = load_data()
    initialization()

    if st.session_state.completed and not st.session_state.start_new_survey:
        exit_screen()
        return

    if st.session_state.username is None:
        welcome_screen()
    else:
        # Check if user progress exists in Firebase
        saved_state = read(st.session_state.username)
        if saved_state:
            # If there's saved progress and the survey has not been continued, show continue screen
            if "survey_continued" not in st.session_state or not st.session_state.survey_continued:
                continue_survey_screen(data)
            else:
                if st.session_state.current_index >= len(data):
                    # If all questions have been answered, show the exit screen
                    print("survey completed")
                    survey_completed()
                # Otherwise, show questions from where they left off
                questions_screen(data)
        else:
            # If no saved progress (new user), start with the questions screen
            questions_screen(data)


if __name__ == "__main__":
    ui()