package incheon.com.file.web;

import incheon.com.file.service.ComFileService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 파일 다운로드 Controller
 * (별도 Controller로 분리하여 ResponseEntity가 아닌 직접 응답 처리)
 */
@Slf4j
@RestController
@RequiredArgsConstructor
class ComFileDownloadController {

    private final ComFileService comFileService;

    /**
     * 파일 다운로드
     */
    @GetMapping("/api/v1/comfile/download/{fileId}")
    @Operation(summary = "파일 다운로드", description = "파일을 다운로드합니다")
    public void downloadFile(
            @PathVariable @Parameter(description = "파일ID") String fileId,
            HttpServletResponse response) {

        try {
            comFileService.downloadFile(fileId, response);
        } catch (IOException e) {
            log.error("파일 다운로드 실패: {}", fileId, e);
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        }
    }

    /**
     * 파일 그룹 일괄 다운로드 (ZIP)
     */
    @GetMapping("/api/v1/comfile/download/group/{atchFileId}")
    @Operation(summary = "파일 그룹 일괄 다운로드", description = "파일 그룹의 모든 파일을 ZIP으로 압축하여 다운로드합니다")
    public void downloadFileGroup(
            @PathVariable @Parameter(description = "파일그룹ID") String atchFileId,
            HttpServletResponse response) {

        try {
            comFileService.downloadFileGroup(atchFileId, response);
        } catch (IOException e) {
            log.error("파일 그룹 다운로드 실패: {}", atchFileId, e);
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        }
    }
}
