package com.snack.server.common.storage;

/**
 * 文件存储接口（策略模式）
 *
 * 业务层只依赖此接口，不关心文件存在哪。
 * 默认实现：LocalFileStorage（本地 ./uploads/）
 * 后续可扩展：QiniuFileStorage / AliyunOssFileStorage / MinioFileStorage
 */
public interface FileStorage {

    /**
     * 存储文件
     *
     * @param bytes       文件字节
     * @param originalName 原始文件名（含扩展名）
     * @param bizType     业务类型（avatar/product/banner 等）
     * @return 存储结果
     */
    FileStoreResult store(byte[] bytes, String originalName, String bizType);

    /**
     * 删除文件
     *
     * @param path 存储路径（不含域名）
     */
    void delete(String path);

    /**
     * 通过相对路径获取完整访问 URL
     */
    String getAccessUrl(String path);

    /**
     * 从完整 URL 反查存储路径（用于删除时定位文件）
     * @param url 完整 URL（http://...）
     * @return 相对 path；null 表示无法解析
     */
    String parsePathFromUrl(String url);
}
