package com.snack.server.module.file.service;

import com.snack.server.module.file.entity.UploadFile;
import com.snack.server.module.file.enums.FileBizTypeEnum;
import com.snack.server.module.file.vo.FileUploadVO;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * 文件上传业务
 */
public interface FileService {

    /**
     * 上传文件
     * @param file Spring MultipartFile
     * @param bizType 业务类型字符串（avatar / product / ...）
     * @return 上传结果（含访问 URL）
     */
    FileUploadVO upload(MultipartFile file, String bizType);

    /**
     * 业务上传：自动写库 + 记录上传人
     */
    FileUploadVO uploadWithUploader(MultipartFile file, String bizType, Long uploaderId);

    /**
     * 删除文件（同时删物理文件 + 数据库记录）
     */
    void deleteFile(Long id);

    /**
     * 通过路径直接删除物理文件（不查数据库）
     */
    void deleteByPath(String path);

    /**
     * 查询文件记录
     */
    UploadFile getById(Long id);

    /**
     * 业务类型枚举
     */
    FileBizTypeEnum resolveBizType(String bizType);
}
