package go.kr.project.common.service;

import go.kr.project.common.model.HtmlEditorFileVO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * packageName    : go.kr.project.common.service
 * fileName       : HtmlEditorService
 * author         : 개발자
 * date           : 2025-05-23
 * description    : HTML 에디터 관련 비즈니스 로직을 처리하는 서비스 인터페이스
 * ===========================================================
 * DATE              AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2025-05-23        개발자       최초 생성
 */
public interface HtmlEditorService {

    /**
     * 파일 정보를 조회합니다.
     * 
     * @param fileId 파일 ID
     * @return 파일 정보
     */
    HtmlEditorFileVO selectHtmlEditorFile(String fileId);

    /**
     * 모듈에 첨부된 파일 목록을 조회합니다.
     * 
     * @param moduleId 모듈 ID
     * @return 파일 목록
     */
    List<HtmlEditorFileVO> selectHtmlEditorFileListByModuleId(String moduleId);

    /**
     * 파일 목록을 조회합니다.
     * 
     * @param vo 검색 조건을 담은 VO 객체
     * @return 파일 목록
     */
    List<HtmlEditorFileVO> selectHtmlEditorFileList(HtmlEditorFileVO vo);

    /**
     * 파일 목록의 총 개수를 조회합니다.
     * 
     * @param vo 검색 조건을 담은 VO 객체
     * @return 파일 목록의 총 개수
     */
    int selectHtmlEditorFileListTotalCount(HtmlEditorFileVO vo);

    /**
     * 파일 정보를 삭제합니다.
     * 
     * @param fileId 파일 ID
     * @return 삭제된 행의 수
     */
    int deleteHtmlEditorFile(String fileId);

    /**
     * 모듈에 첨부된 파일 정보를 삭제합니다.
     * 
     * @param moduleId 모듈 ID
     * @return 삭제된 행의 수
     */
    int deleteHtmlEditorFileByModuleId(String moduleId);

    /**
     * 파일을 다운로드합니다.
     * 
     * @param fileId 다운로드할 파일의 ID
     * @param request HTTP 요청 객체
     * @param response HTTP 응답 객체
     */
    void downloadHtmlEditorFile(String fileId, HttpServletRequest request, HttpServletResponse response);

    /**
     * 파일 업로드 처리를 수행합니다.
     * 
     * @param file 업로드할 파일
     * @param moduleId 모듈 ID (선택적)
     * @param fileType 파일 타입 (image, video 등)
     * @param rgtr 등록자
     * @return 업로드된 파일 정보
     */
    HtmlEditorFileVO uploadHtmlEditorFile(MultipartFile file, String moduleId, String fileType, String rgtr);

    /**
     * 여러 파일 업로드 처리를 수행합니다.
     * 
     * @param files 업로드할 파일 목록
     * @param moduleId 모듈 ID (선택적)
     * @param fileType 파일 타입 (image, video 등)
     * @param rgtr 등록자
     * @return 업로드된 파일 정보 목록
     */
    List<HtmlEditorFileVO> uploadHtmlEditorFiles(List<MultipartFile> files, String moduleId, String fileType, String rgtr);

    /**
     * 파일 정보를 수정합니다.
     * 
     * @param vo 수정할 파일 정보를 담은 VO 객체
     * @return 수정된 행의 수
     */
    int updateHtmlEditorFile(HtmlEditorFileVO vo);
}