package incheon.guide.web;

import incheon.com.file.service.ComFileService;
import incheon.com.file.vo.ComFileSearchVO;
import incheon.com.file.vo.ComFileVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.List;

/**
 * 파일 업로드 컴포넌트 샘플 Controller
 *
 * <p>파일 업로드 컴포넌트의 다양한 사용법을 보여주는 샘플 페이지 제공
 *
 * @author Incheon City Development Team
 * @since 2025-01-17
 */
@Slf4j
@Controller
@RequiredArgsConstructor
public class ComFileSampleController {

    private final ComFileService comFileService;

    /**
     * 파일 업로드 샘플 페이지
     *
     * <p>다양한 모드와 옵션을 활용한 파일 업로드 컴포넌트 예제를 제공합니다.
     *
     * <p><b>접근 URL:</b> /com/file/sample.do
     *
     * @param selectedAtchFileId 선택할 첨부파일 번호 (파라미터)
     * @param model 모델
     * @return JSP 뷰 경로
     */
    @GetMapping("/com/file/sample.do")
    public String samplePage(String selectedAtchFileId, ModelMap model) {
        log.info("파일 업로드 샘플 페이지 접근 - selectedAtchFileId: {}", selectedAtchFileId);

        // 최근 파일 그룹 목록 조회 (최대 20개)
        ComFileSearchVO searchVO = new ComFileSearchVO();
        searchVO.setPageUnit(20);
        searchVO.setPageIndex(1);
        searchVO.setFirstIndex(0);  // PostgreSQL OFFSET은 0부터 시작
        searchVO.setTmprYn("N");
        searchVO.setRecordCountPerPage(20);

        List<ComFileVO> fileGroupList = comFileService.selectComFileList(searchVO);
        model.addAttribute("fileGroupList", fileGroupList);

        // 샘플 파일 그룹 ID 선택 로직
        String defaultAtchFileId = null;

        // 1순위: 파라미터로 전달된 selectedAtchFileId
        if (selectedAtchFileId != null && !selectedAtchFileId.isEmpty()) {
            // 파라미터로 전달된 ID가 목록에 존재하는지 확인
            if (fileGroupList != null) {
                for (ComFileVO fileGroup : fileGroupList) {
                    if (selectedAtchFileId.equals(fileGroup.getAtchFileId())) {
                        defaultAtchFileId = selectedAtchFileId;
                        log.info("파라미터로 전달된 파일 그룹 선택: {}", selectedAtchFileId);
                        break;
                    }
                }
            }
        }

        // 2순위: 정식 파일 그룹(tmprYn = 'N') 우선 선택
        if (defaultAtchFileId == null && fileGroupList != null && !fileGroupList.isEmpty()) {
            for (ComFileVO fileGroup : fileGroupList) {
                if ("N".equals(fileGroup.getTmprYn())) {
                    defaultAtchFileId = fileGroup.getAtchFileId();
                    log.info("정식 파일 그룹 선택: {}", defaultAtchFileId);
                    break;
                }
            }
        }

        // 3순위: 첫 번째 그룹 선택
        if (defaultAtchFileId == null && fileGroupList != null && !fileGroupList.isEmpty()) {
            defaultAtchFileId = fileGroupList.get(0).getAtchFileId();
            log.info("첫 번째 파일 그룹 선택: {}", defaultAtchFileId);
        }

        model.addAttribute("sampleAtchFileId", defaultAtchFileId);

        return "guide/sampleFileUpload";
    }
}