package com.yaoai.storage.service;

import java.io.IOException;
import java.io.InputStream;

public interface TosService {

    /**
     * 上传对象到 TOS，返回 TOS key（不含 bucket）
     */
    String upload(String key, InputStream content, long contentLength, String contentType);

    /**
     * 删除 TOS 对象
     */
    void delete(String key);

    /**
     * 生成预签名访问 URL（GET），有效期 expiresSeconds 秒；仅用于传给外部 AI 服务
     */
    String presignedGetUrl(String key, long expiresSeconds);

    /**
     * 返回永久公开访问 URL（bucket 须为 public-read），用于存库和返回前端
     */
    String publicUrl(String key);

    /**
     * 规范化已存在的 TOS 公网 URL，确保浏览器按 inline 方式预览对象。
     */
    String normalizePublicUrl(String url);

    /**
     * 读取 TOS 对象内容，以 UTF-8 字符串返回（用于文本文件）
     */
    String readText(String key);

    /**
     * 返回 TOS 对象的原始输入流，调用方负责关闭
     */
    InputStream getInputStream(String key) throws IOException;

    /**
     * 构建 TOS object key：{tenantId}/{projectId}/{assetType}/{timestamp}.{ext}
     */
    static String buildKey(Long tenantId, Long projectId, String assetType, String originalFilename) {
        String ext = "";
        if (originalFilename != null && originalFilename.contains(".")) {
            ext = originalFilename.substring(originalFilename.lastIndexOf('.'));
        }
        return String.format("%d/%d/%s/%d%s", tenantId, projectId, assetType,
                System.currentTimeMillis(), ext);
    }
}
