var { useState, useEffect, useRef } = React;

// 🌟 因為伺服器現在跑在 Port 80，所以把 :3000 拿掉了
var SERVER_URL = '';

var secureFetch = async (endpoint, options = {}) => {
    // 自動判斷是否已經有 http 開頭
    const url = endpoint.startsWith('http') ? endpoint : `${SERVER_URL}${endpoint}`;
    
    // 設定確保可以跨網域帶入 Session Cookie
    const finalOptions = {
        ...options,
        credentials: 'include',
    };

    try {
        const res = await fetch(url, finalOptions);
        
        // 攔截 401 登入過期錯誤
        if (
            res.status === 401 && 
            !url.includes('/api/login') && 
            !url.includes('/api/admin/') && 
            !url.includes('/api/me') 
        ) {
            setTimeout(() => {
                alert('登入時效已過，請重新登入'); 
                window.location.reload(); // 重新整理頁面以返回登入頁
            }, 100);
            throw new Error('Unauthorized');
        } 
        
        return res;
    } catch(e) { 
        throw e; 
    }
};

// ==========================================
// 🏋️‍♂️ 內建健身動作資料庫
// ==========================================
var EXERCISE_DB = {
    '胸': ['槓鈴臥推', '上斜槓鈴臥推', '下斜槓鈴臥推', '啞鈴臥推', '上斜啞鈴臥推', '下斜啞鈴臥推', '機械臥推 (Chest Press)', '蝴蝶機夾胸 (Pec Deck)', '啞鈴飛鳥', '滑輪飛鳥 (中/高/低)', '雙槓臂屈伸 (胸部)', '伏地挺身', '史密斯臥推'],
    '背': ['傳統硬舉', '羅馬尼亞硬舉 (RDL)', '引體向上', '滑輪下拉 (寬距)', '滑輪下拉 (窄距/反握)', '坐姿划船 (Cable Row)', '槓鈴划船', '啞鈴單臂划船', 'T槓划船 (T-Bar Row)', '直臂下拉', '機械划船', '羅馬椅挺身 (Hyperextension)', '輔助引體向上'],
    '腿': ['槓鈴深蹲', '頸前深蹲 (Front Squat)', '史密斯深蹲', '腿推舉 (Leg Press)', '保加利亞分腿蹲', '啞鈴弓箭步', '腿屈伸 (Leg Extension)', '腿彎舉 (Leg Curl)', '坐姿腿彎舉', '小腿提踵 (站姿/坐姿)', '臀推 (Hip Thrust)', '相撲硬舉'],
    '肩': ['站姿槓鈴肩推', '坐姿啞鈴肩推', '史密斯肩推', '機械肩推 (Shoulder Press)', '啞鈴側平舉', '滑輪側平舉', '啞鈴前平舉', '槓鈴前平舉', '蝴蝶機反向飛鳥', '啞鈴反向飛鳥', '槓鈴聳肩', '阿諾推舉'],
    '手': ['槓鈴二頭彎舉', '啞鈴二頭彎舉', '錘式彎舉', '集中彎舉', '牧師椅彎舉', '滑輪二頭彎舉', '窄距臥推', '仰臥三頭臂屈伸 (法式彎舉)', '啞鈴頸後臂屈伸', '滑輪三頭下壓 (繩索/直桿)', '雙槓臂屈伸 (三頭)'],
    '核心': ['仰臥起坐', '捲腹 (Crunch)', '懸垂舉腿', '羅馬椅抬腿', '俄羅斯轉體', '棒式 (Plank)', '側棒式', '健腹輪', '滑輪捲腹'],
    '有氧與其他': ['跑步機', '橢圓機', '飛輪', '划船機', '登階機 (Stairmaster)', '跳繩', '波比跳', '戰繩']
};
