/**
 * 早安电台 — API 请求封装
 * 支持 Promise、BaseURL 配置、自动附带 Token
 */

// 接口基础地址（预留占位符，对接后端时替换）
//const API_BASE_URL = 'https://radio.sundynix.cn/api'
const API_BASE_URL = 'http://192.168.0.184:8888'


/**
 * 获取本地存储的 token
 */
function getToken() {
    return wx.getStorageSync('token') || ''
}

/**
 * 通用请求方法
 * @param {Object} options
 * @param {string} options.url - 接口路径（不含 BaseURL）
 * @param {string} [options.method='GET'] - 请求方法
 * @param {Object} [options.data] - 请求参数
 * @param {Object} [options.header] - 自定义请求头
 * @returns {Promise}
 */
function request(options) {
    return new Promise((resolve, reject) => {
        const token = getToken()

        wx.request({
            url: `${API_BASE_URL}${options.url}`,
            method: options.method || 'GET',
            data: options.data || {},
            header: {
                'Content-Type': 'application/json',
                'Authorization': token ? `Bearer ${token}` : '',
                ...options.header
            },
            success(res) {
                if (res.statusCode >= 200 && res.statusCode < 300) {
                    resolve(res.data)
                } else if (res.statusCode === 401) {
                    // Token 过期或未登录，跳转到登录
                    wx.removeStorageSync('token')
                    wx.redirectTo({ url: '/pages/splash/index' })
                    reject(new Error('未授权，请重新登录'))
                } else {
                    reject(new Error(res.data.message || `请求失败: ${res.statusCode}`))
                }
            },
            fail(err) {
                reject(new Error(err.errMsg || '网络请求失败'))
            }
        })
    })
}

/**
 * 快捷方法
 */
function get(url, data) {
    return request({ url, method: 'GET', data })
}

function post(url, data) {
    return request({ url, method: 'POST', data })
}

function put(url, data) {
    return request({ url, method: 'PUT', data })
}

function del(url, data) {
    return request({ url, method: 'DELETE', data })
}

module.exports = {
    API_BASE_URL,
    request,
    get,
    post,
    put,
    del
}
