File size: 7,039 Bytes
f492c51
 
 
 
 
 
7e28e69
d3e21b9
 
 
 
 
f492c51
 
 
 
 
 
 
 
02a1163
 
 
 
 
 
 
 
 
 
 
 
 
f492c51
02a1163
 
f492c51
 
02a1163
 
 
 
 
f492c51
02a1163
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f492c51
d3e21b9
 
 
 
 
 
 
 
 
f492c51
d3e21b9
 
 
 
 
 
 
 
 
 
 
 
f492c51
d3e21b9
 
f492c51
d3e21b9
 
f492c51
fed092d
 
 
 
 
 
 
f492c51
fed092d
 
f492c51
fed092d
 
 
 
 
 
 
 
 
 
 
 
f492c51
fed092d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f492c51
fed092d
 
 
 
 
 
 
f492c51
fed092d
 
 
 
 
 
 
 
f492c51
fed092d
 
f492c51
fed092d
 
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
import streamlit as st
import random
import pandas as pd
import requests
from io import BytesIO
from PIL import Image

import os
print("Current Working Directory:", os.getcwd())
print("Files in the directory:", os.listdir('.'))


# Define maximum dimensions for the fortune image (in pixels)
MAX_SIZE = (400, 400)

# Set page configuration
st.set_page_config(page_title="Fortuen Stick Enquiry", layout="wide")

st.title("Fortuen Stick Enquiry")

# Initialize session state variables
if "submitted_text" not in st.session_state:
    st.session_state.submitted_text = False
if "fortune_number" not in st.session_state:
    st.session_state.fortune_number = None
if "fortune_row" not in st.session_state:
    st.session_state.fortune_row = None
if "fortune_data" not in st.session_state:
    try:
        st.session_state.fortune_data = pd.read_csv(r"/home/user/app/detail.csv")
    except Exception as e:
        st.error(f"Error loading CSV: {e}")
        st.session_state.fortune_data = None

if "stick_clicked" not in st.session_state:
    st.session_state.stick_clicked = False


# Callback function for the submit button:
def submit_text_callback():
    st.session_state.submitted_text = True
    # Randomly generate a number from 1 to 100
    st.session_state.fortune_number = random.randint(1, 100)
    
    # Look up the row in the CSV where CNumber matches the generated fortune number.
    df = st.session_state.fortune_data
    if df is not None:
        matching_row = df[df['CNumber'] == st.session_state.fortune_number]
        if not matching_row.empty:
            row = matching_row.iloc[0]
            st.session_state.fortune_row = {
                "Header": row.get("Header", "N/A"),
                "Luck": row.get("Luck", "N/A"),
                "Description": row.get("Description", "No description available."),
                "Detail": row.get("Detail", "No detail available."),
                "HeaderLink": row.get("link", None)  # URL to the image
            }
        else:
            st.session_state.fortune_row = {
                "Header": "N/A",
                "Luck": "N/A",
                "Description": "No description available.",
                "Detail": "No detail available.",
                "HeaderLink": None
            }

# # Function to load and resize local images using Pillow
# def load_and_resize_image(path, max_size=MAX_SIZE):
#     try:
#         img = Image.open(path)
#         img.thumbnail(max_size, Image.Resampling.LANCZOS)
#         return img
#     except Exception as e:
#         st.error(f"Error loading image: {e}")
#         return None

# # Function to download image from URL and resize it
# def download_and_resize_image(url, max_size=MAX_SIZE):
#     try:
#         response = requests.get(url)
#         response.raise_for_status()
#         image_bytes = BytesIO(response.content)
#         img = Image.open(image_bytes)
#         img.thumbnail(max_size, Image.Resampling.LANCZOS)
#         return img
#     except Exception as e:
#         st.error(f"Error loading image from URL: {e}")
#         return None

# def stick_enquiry_callback():
#     st.session_state.stick_clicked = True

# # Main layout: Left (input) and Right (fortune display)
# left_col, _, right_col = st.columns([3, 1, 5])

# # ---- Left Column ----
# with left_col:
#     left_top = st.container()
#     left_bottom = st.container()
#     # Top container: Input area and submit button
#     with left_top:
#         user_sentence = st.text_area("Enter your question in English", key="user_sentence", height=150)
        
#         st.button("submit", key="submit_button", on_click=submit_text_callback)
#     # (The previous Stick Enquiry button has been removed)
    
#     if st.session_state.submitted_text:
#     # Left Bottom: Centered "解籤/Stick Enquiry" button
#         with left_bottom:
#             # Add vertical spacing to approximately center the button vertically
#             for _ in range(5):
#                 st.write("")
#             col1, col2, col3 = st.columns(3)
#             with col2:
#                 st.button("Cfu Explain", key="stick_button", on_click=stick_enquiry_callback)
#             if st.session_state.stick_clicked:
#                 # st.write("Here are the stick enquiry words...")  # Placeholder text
#                 st.text_area(' ', value="Here are the stick enquiry words...", height=300, disabled=True)

# # ---- Right Column ----
# with right_col:
#     # Top container: Fortune image area
#     with st.container():
#         col_left, col_center, col_right = st.columns([1, 2, 1])
#         with col_center:
#             if st.session_state.submitted_text and st.session_state.fortune_row:
#                 header_link = st.session_state.fortune_row.get("HeaderLink")
#                 if header_link:
#                     # Download the image from the URL
#                     img_from_url = download_and_resize_image(header_link)
#                     if img_from_url:
#                         st.image(img_from_url, use_container_width=False)
#                     else:
#                         # Fallback: display a default image if download fails
#                         img = load_and_resize_image("error.png")
#                         if img:
#                             st.image(img, use_container_width=False)
#                 else:
#                     # Fallback: display a default image if no header link is provided
#                     img = load_and_resize_image("error.png")
#                     if img:
#                         st.image(img, use_container_width=False)
#             else:
#                 # Before submit, show the default image
#                 img = load_and_resize_image("fortune.png")
#                 if img:
#                     st.image(img, caption="Your Fortune", use_container_width=False)
    
#     # Bottom container: Display fortune details using text areas
#     with st.container():
#         if st.session_state.fortune_row:
#             header_text = st.session_state.fortune_row.get("Header", "N/A")
#             luck_text = st.session_state.fortune_row.get("Luck", "N/A")
#             description_text = st.session_state.fortune_row.get("Description", "No description available.")
#             detail_text = st.session_state.fortune_row.get("Detail", "No detail available.")
            
#             # Create a summary with larger text using HTML styling
#             summary = f"""
#             <div style="font-size: 28px; font-weight: bold;">
#                 Fortune stick number: {st.session_state.fortune_number}<br>
#                 Luck: {luck_text}
#             </div>
#             """
#             st.markdown(summary, unsafe_allow_html=True)
            
#             # Second text area: Description
#             st.text_area("Description", value=description_text, height=150, disabled=True)
            
#             # Third text area: Detail
#             st.text_area("Detail", value=detail_text, height=150, disabled=True)