import OSS from 'ali-oss';
import { ossConfig } from '@/config/oss';

class OssService {
    constructor() {
        this.client = new OSS({
            ...ossConfig.config,
            secure: true,  // 使用HTTPS
            // 可以通过设置这个选项来减少警告
            internal: false
        });
    }

    /**
     * 生成文件路径
     * @param {string} fileName 文件名
     * @returns {string} 文件路径
     */
    generateFilePath(fileName) {
        const date = new Date();
        const year = date.getFullYear();
        const month = String(date.getMonth() + 1).padStart(2, '0');
        const day = String(date.getDate()).padStart(2, '0');
        const timestamp = date.getTime();
        const ext = fileName.substring(fileName.lastIndexOf('.'));
        return `novel/${year}${month}${day}/${timestamp}${ext}`;
    }

    /**
     * 上传文件到OSS
     * @param {File} file 文件对象
     * @returns {Promise<string>} 文件URL
     */
    async uploadFile(file) {
        try {
            const filePath = this.generateFilePath(file.name);
            const result = await this.client.put(filePath, file);
            return ossConfig.url + result.name;
        } catch (error) {
            console.error('OSS上传失败:', error);
            throw new Error('文件上传失败');
        }
    }

    /**
     * 上传图片到OSS
     * @param {File} file 图片文件
     * @returns {Promise<string>} 图片URL
     */
    async uploadImage(file) {
        // 验证文件类型
        if (!file.type.startsWith('image/')) {
            throw new Error('只能上传图片文件');
        }
        return this.uploadFile(file);
    }
}

export const ossService = new OssService(); 