File size: 15,565 Bytes
b39cf15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>🌸 尊爵不凡|早安圖產生器模擬器 🌸</title>
    <!-- Google Fonts -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;600;800&family=Noto+Sans+TC:wght@300;400;700;900&display=swap" rel="stylesheet">
    <!-- Stylesheet -->
    <link rel="stylesheet" href="/static/style.css">
    <!-- FontAwesome for Icons -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
</head>
<body>
    <div class="app-container">
        <!-- Sidebar Navigation -->
        <aside class="sidebar">
            <div class="logo-area">
                <span class="logo-emoji">🌸</span>
                <h2>長輩圖產生器</h2>
                <span class="badge">V1.0 Dev</span>
            </div>
            
            <nav class="nav-links">
                <button class="nav-btn active" id="btn-simulator">
                    <i class="fa-solid fa-comments"></i> 聊天指令模擬器
                </button>
                <button class="nav-btn" id="btn-developer">
                    <i class="fa-solid fa-code"></i> FastAPI 串接中心
                </button>
                <button class="nav-btn" id="btn-history">
                    <i class="fa-solid fa-clock-rotate-left"></i> 歷史生成紀錄
                </button>
            </nav>

            <div class="sidebar-footer">
                <button class="settings-trigger-btn" id="btn-open-settings">
                    <i class="fa-solid fa-gears"></i> 設定中心 (API Key)
                </button>
            </div>
        </aside>

        <!-- Main Content Area -->
        <main class="main-content">
            <!-- HEADER -->
            <header class="content-header">
                <div class="header-title">
                    <h1 id="page-title">聊天指令模擬器</h1>
                    <p id="page-desc">在這裡模擬通訊軟體的對話,即時檢視生成的「早安圖」效果。</p>
                </div>
                <div class="api-status">
                    <span class="status-indicator online"></span>
                    <span class="status-text">FastAPI Server: 在線</span>
                </div>
            </header>

            <!-- SECTION: SIMULATOR (Default View) -->
            <section class="section-panel" id="section-simulator-view">
                <div class="grid-layout">
                    <!-- Left Column: Chat Simulator -->
                    <div class="card glass-card chat-simulator-card">
                        <div class="card-header">
                            <h3><i class="fa-solid fa-mobile-screen-button"></i> 群組聊天模擬</h3>
                            <span class="chat-status">LINE/Discord 模擬頻道</span>
                        </div>
                        <div class="chat-messages" id="chat-messages-container">
                            <div class="message bot-message">
                                <div class="avatar">🤖</div>
                                <div class="msg-bubble">
                                    <p>您好!我是早安圖機器人。請在下方輸入 <code>@create image [主題]</code> 來生成一張令人心曠神怡的早安圖!</p>
                                    <span class="time">系統訊息</span>
                                </div>
                            </div>
                        </div>
                        <div class="chat-input-area">
                            <input type="text" id="chat-input" placeholder="輸入 @create image 貓咪..." value="@create image 貓咪">
                            <button id="btn-send-message" class="btn-primary">
                                <i class="fa-solid fa-paper-plane"></i> 發送
                            </button>
                        </div>
                    </div>

                    <!-- Right Column: Inspector Panel (Phase 1 Preview) -->
                    <div class="card glass-card inspector-card">
                        <div class="card-header">
                            <h3><i class="fa-solid fa-magnifying-glass-chart"></i> 圖片效果檢視器 (Phase 1)</h3>
                            <span class="badge neon-rainbow-badge">預覽畫布</span>
                        </div>
                        <div class="inspector-body">
                            <div class="preview-container" id="preview-image-container">
                                <div class="empty-state" id="preview-empty-state">
                                    <i class="fa-regular fa-image"></i>
                                    <p>等待指令輸入以生成預覽圖片</p>
                                    <span class="subtext">在左側發送 @create image 指令</span>
                                </div>
                                <div class="loading-state hidden" id="preview-loading-state">
                                    <div class="spinner">
                                        <div class="double-bounce1"></div>
                                        <div class="double-bounce2"></div>
                                    </div>
                                    <p id="loading-step-text">正在初始化 API 服務...</p>
                                    <span class="loading-funny-quote" id="loading-funny-quote">「蓮花正在盛開,太陽正在升起...」</span>
                                </div>
                                <img id="preview-image" src="" alt="早安圖生成結果" class="hidden">
                            </div>

                            <div class="metadata-panel hidden" id="preview-metadata-panel">
                                <div class="meta-row">
                                    <span class="meta-label">輸入主題:</span>
                                    <span class="meta-val" id="meta-query">貓咪</span>
                                </div>
                                <div class="meta-row">
                                    <span class="meta-label">生成賀詞:</span>
                                    <span class="meta-val greeting-text-highlight" id="meta-greeting">早安!吸貓一口,福氣雙倍!認同請分享!</span>
                                </div>
                                <div class="meta-row">
                                    <span class="meta-label">擴寫 Prompt:</span>
                                    <span class="meta-val code-block" id="meta-prompt">A kitsch traditional Chinese...</span>
                                </div>
                                <div class="button-group">
                                    <a id="btn-download" href="#" download="morning_card.jpg" class="btn-secondary">
                                        <i class="fa-solid fa-download"></i> 下載圖片
                                    </a>
                                    <button id="btn-show-api-details" class="btn-primary">
                                        <i class="fa-solid fa-share-nodes"></i> 取得呼叫 API
                                    </button>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </section>

            <!-- SECTION: DEVELOPER HUB (Phase 2 Integration) -->
            <section class="section-panel hidden" id="section-developer-view">
                <div class="card glass-card">
                    <div class="card-header">
                        <h3><i class="fa-solid fa-network-wired"></i> FastAPI 隊友呼叫串接設定 (Phase 2)</h3>
                        <span class="badge green-badge">快速呼叫</span>
                    </div>
                    <div class="developer-body">
                        <div class="info-alert">
                            <i class="fa-solid fa-circle-info"></i>
                            <p><strong>隊友開發指南:</strong> 已產生之同一張圖片已經由 FastAPI 後端包裝。通訊軟體 API (成員 A) 可直接透過下列 API 端點提取最新生成的圖片或發起新的生成任務。</p>
                        </div>

                        <div class="api-links-grid">
                            <div class="api-link-box">
                                <div class="link-header">
                                    <span class="method get">GET</span>
                                    <h4>獲取最新生成圖片 (Teammate Bot 最推薦)</h4>
                                </div>
                                <p class="link-desc">此端點會直接回傳最新一張早安圖的二進位圖片檔 (image/jpeg)。隊友的機器人可直接將此 URL 丟入 LINE/Discord API 發送!</p>
                                <div class="url-copy-row">
                                    <input type="text" readonly id="url-latest" value="http://localhost:8000/api/latest">
                                    <button class="btn-copy" data-target="url-latest"><i class="fa-regular fa-copy"></i> 複製</button>
                                </div>
                            </div>

                            <div class="api-link-box">
                                <div class="link-header">
                                    <span class="method post">POST</span>
                                    <h4>發起新生成任務 (JSON 串接)</h4>
                                </div>
                                <p class="link-desc">透過發送 JSON Payload 發起生成任務,回傳 JSON 包含 base64 資料及個別圖片 URL。</p>
                                <div class="url-copy-row">
                                    <input type="text" readonly id="url-generate" value="http://localhost:8000/api/generate">
                                    <button class="btn-copy" data-target="url-generate"><i class="fa-regular fa-copy"></i> 複製</button>
                                </div>
                            </div>
                        </div>

                        <div class="code-snippets-section">
                            <h3><i class="fa-solid fa-laptop-code"></i> 呼叫範例程式碼</h3>
                            
                            <div class="tab-header">
                                <button class="tab-btn active" data-tab="code-curl">cURL</button>
                                <button class="tab-btn" data-tab="code-python">Python (Requests)</button>
                                <button class="tab-btn" data-tab="code-js">Javascript (Fetch)</button>
                            </div>
                            
                            <div class="tab-content" id="code-curl">
                                <pre><code>curl -X POST "http://localhost:8000/api/generate" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "@create image 貓咪"
  }'</code></pre>
                            </div>
                            
                            <div class="tab-content hidden" id="code-python">
                                <pre><code>import requests

url = "http://localhost:8000/api/generate"
payload = {
    "message": "@create image 貓咪"
}
response = requests.post(url, json=payload)
data = response.json()

if data.get("success"):
    print("生成成功!圖片 URL:", data.get("image_url"))
    # Teammates can also download directly from:
    # http://localhost:8000/api/latest</code></pre>
                            </div>

                            <div class="tab-content hidden" id="code-js">
                                <pre><code>fetch('http://localhost:8000/api/generate', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        message: '@create image 貓咪'
    })
})
.then(res => res.json())
.then(data => {
    console.log("Image base64:", data.image_base64);
    console.log("Image URL:", data.image_url);
});</code></pre>
                            </div>
                        </div>
                    </div>
                </div>
            </section>

            <!-- SECTION: HISTORY -->
            <section class="section-panel hidden" id="section-history-view">
                <div class="card glass-card">
                    <div class="card-header">
                        <h3><i class="fa-solid fa-images"></i> 早安圖生成庫</h3>
                        <p class="history-count" id="history-count-text">共 0 張早安圖</p>
                    </div>
                    <div class="history-grid" id="history-grid-container">
                        <!-- History items dynamically inserted here -->
                    </div>
                </div>
            </section>
        </main>
    </div>

    <!-- SETTINGS MODAL -->
    <div class="modal-overlay hidden" id="settings-modal">
        <div class="modal-card glass-card">
            <div class="modal-header">
                <h3><i class="fa-solid fa-sliders"></i> 產生器偏好設定</h3>
                <button class="btn-close" id="btn-close-settings"><i class="fa-solid fa-xmark"></i></button>
            </div>
            <div class="modal-body">
                <div class="form-group">
                    <label for="input-api-key"><i class="fa-solid fa-key"></i> Google Gemini API Key (GOOGLE_API_KEY)</label>
                    <input type="password" id="input-api-key" placeholder="輸入 AIzaSy... 金鑰">
                    <p class="help-text">用於自動擴寫提示詞、自動產出極致俗氣且切合主題的中文賀詞。若留空,將從後端環境變數讀取或使用內建預設賀詞庫。</p>
                </div>
                
                <div class="form-group">
                    <label for="input-custom-greeting"><i class="fa-solid fa-pen-nib"></i> 強制自訂賀詞 (留空則由 AI 自動生成)</label>
                    <input type="text" id="input-custom-greeting" placeholder="例如:福氣滿滿!認同請分享!">
                    <p class="help-text">如果設定此項,將覆蓋 AI 生成的早安圖文字內容。</p>
                </div>

                <div class="form-group">
                    <label for="select-header-preset"><i class="fa-solid fa-heading"></i> 頂部大字 Banner 標題預設</label>
                    <select id="select-header-preset">
                        <option value="random">🌟 隨機 (早安/平安喜樂/吉祥如意...)</option>
                        <option value="早安">早安</option>
                        <option value="平安喜樂">平安喜樂</option>
                        <option value="吉祥如意">吉祥如意</option>
                        <option value="福氣滿滿">福氣滿滿</option>
                    </select>
                </div>
            </div>
            <div class="modal-footer">
                <button class="btn-secondary" id="btn-reset-settings">重設</button>
                <button class="btn-primary" id="btn-save-settings">儲存設定</button>
            </div>
        </div>
    </div>

    <script src="/static/app.js"></script>
</body>
</html>