# 台銀即期賣出匯率換算工具

一個跨平台的小工具，抓取台灣銀行官方 USD / JPY / EUR 即期賣出匯率，並提供即時台幣換算功能。

## 特色

- **即時匯率**：從台銀官網 CSV（`rate.bot.com.tw/xrt/flcsv/0/day`）抓取，免 API key
- **雙向換算**：每個幣別獨立輸入框，輸入外幣金額立即換算出台幣
- **一鍵複製**：按「複製」即把純數字（如 `3162.00`）寫入剪貼簿，可直接貼到 Excel
- **零依賴**：單一執行檔，使用者不需要安裝 Python、Rust 或任何 runtime
- **跨平台**：Windows 與 macOS 共用同一份 Rust 原始碼

## 檔案結構

```
02/
├── bot_rates.exe               # Windows 執行檔（5.4 MB）
├── bot_rates.zip               # Windows 執行檔的 zip 壓縮（2.7 MB，方便傳送）
├── BotRates.app/               # macOS 應用程式 bundle
│   └── Contents/
│       ├── Info.plist
│       └── MacOS/BotRates      # macOS 執行檔（5.2 MB）
├── bot_rates_rs/               # Rust 原始碼
│   ├── Cargo.toml
│   ├── .cargo/config.toml      # 交叉編譯 linker 設定
│   └── src/main.rs
├── bot_rates.py                # 早期 Python CLI 版（僅列印匯率）
├── bot_rates_gui.py            # 早期 Python tkinter GUI 版（已被 Rust 版取代）
├── build.bat                   # Python → exe 打包腳本（已不需要）
├── README.md
├── QUICKSTART.md
└── SUMMARY.md
```

## 使用方式

### 一般使用者

**Windows**：解壓 `bot_rates.zip`，雙擊 `bot_rates.exe` 即可執行。

**macOS**：雙擊 `BotRates.app`。首次開啟若跳出「無法驗證開發者」提示，請在「系統設定 → 隱私權與安全性」按「仍要打開」，或執行 `xattr -cr BotRates.app`。

啟動後：
1. 每一列左側顯示幣別和即期賣出匯率
2. 中間輸入外幣金額（預設 100）
3. 右側自動顯示台幣換算結果
4. 按「複製」按鈕即可把換算結果貼到其他軟體
5. 左下角顯示最後更新時間，右下角「重新整理」可重新抓匯率

### 開發者（重新編譯）

需要 Rust 工具鏈與 mingw-w64（僅 Windows 交叉編譯需要）：

```bash
# macOS 版
cd bot_rates_rs
RUST_MIN_STACK=16777216 cargo build --release
# 輸出：target/release/bot_rates

# Windows 版（從 macOS 交叉編譯）
brew install mingw-w64
rustup target add x86_64-pc-windows-gnu
RUST_MIN_STACK=16777216 cargo build --release --target x86_64-pc-windows-gnu
# 輸出：target/x86_64-pc-windows-gnu/release/bot_rates.exe
```

> `RUST_MIN_STACK=16777216` 是為了避免 LLVM 在優化階段堆疊溢位（`eframe` 依賴龐大，optimize pipeline 會大量遞迴）。

## 技術棧

| 用途 | 函式庫 |
|------|--------|
| GUI framework | `eframe` / `egui` 0.27（immediate mode，無系統依賴） |
| HTTPS 請求 | `ureq` + `rustls`（純 Rust TLS，不需要 OpenSSL 或 SChannel） |
| 中文字型 | 執行期載入系統字型：Windows 的 `msjh.ttc`、macOS 的 `PingFang.ttc` |

## 資料來源

- 台灣銀行牌告匯率 CSV：<https://rate.bot.com.tw/xrt/flcsv/0/day>
- 欄位索引：`即期賣出` 位於第 14 欄（index 13）
