package incheon.ags.mrb.gallery.web;

import incheon.ags.ias.comCd.mapper.ComCdMapper;
import incheon.ags.ias.comCd.vo.ComCdVO;
import incheon.ags.ias.comCd.vo.ComGroupCdVO;
import incheon.com.security.util.SecurityUtil;
import incheon.com.security.vo.LoginVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 나의 지도 레시피 설정 API 컨트롤러
 */
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/ags/mrb/gallery/settings")
public class SettingApiController {

    private final ComCdMapper comCdMapper;

    /**
     * 나의 지도 레시피 설정 조회 API
     */
    @GetMapping("/load.do")
    public ResponseEntity<Map<String, Object>> loadSettings() {
        Map<String, Object> response = new HashMap<>();

        LoginVO loginUser = SecurityUtil.getCurrentUser();
        if (loginUser == null) {
            throw new AuthenticationCredentialsNotFoundException("로그인이 필요합니다.");
        }
        String userId = loginUser.getUserId();
        log.info("레시피 설정 조회 요청 - userId: {}", userId);

        // 1. 자동 삭제 여부 조회 (MRB_RECIPE_DEL_GBN)
        ComGroupCdVO delGbnGroup = comCdMapper.selectComGroupCdDetail("MRB_RECIPE_DEL_GBN");
        boolean autoDeleteEnabled = delGbnGroup != null && "Y".equals(delGbnGroup.getUseYn());

        // 2. 삭제 주기 조회 (MRB_RECIPE_DEL_CYC에서 USE_YN = 'Y'인 코드 찾기)
        List<ComCdVO> delCycList = comCdMapper.getComCdByGroupCd("MRB_RECIPE_DEL_CYC");
        String deletePeriod = "01"; // 기본값
        for (ComCdVO code : delCycList) {
            if ("Y".equals(code.getUseYn())) {
                deletePeriod = code.getCd();
                break;
            }
        }
        log.info("레시피 설정 조회 완료 - userId: {}, 자동삭제: {}, 삭제주기: {}", userId, autoDeleteEnabled, deletePeriod);
        response.put("success", true);
        response.put("autoDeleteEnabled", autoDeleteEnabled);
        response.put("deletePeriod", deletePeriod);
        return ResponseEntity.ok(response);
    }

    /**
     * 나의 지도 레시피 설정 저장 API
     */
    @PostMapping("/save.do")
    public ResponseEntity<Map<String, Object>> saveSettings(
            @RequestParam("autoDeleteEnabled") boolean autoDeleteEnabled,
            @RequestParam("deletePeriod") String deletePeriod) {

        Map<String, Object> response = new HashMap<>();

        LoginVO loginUser = SecurityUtil.getCurrentUser();
        String userId = loginUser != null ? loginUser.getUserId() : "unknown";
        log.info("레시피 설정 저장 요청 - userId: {}, autoDeleteEnabled: {}, deletePeriod: {}",
                userId, autoDeleteEnabled, deletePeriod);

        // 1. 자동 삭제 여부 업데이트 (MRB_RECIPE_DEL_GBN.USE_YN)
        ComGroupCdVO delGbnGroup = new ComGroupCdVO();
        delGbnGroup.setGroupCd("MRB_RECIPE_DEL_GBN");
        delGbnGroup.setGroupCdNm("나의 지도 레시피 자동 삭제 여부");
        delGbnGroup.setGroupCdExpln("나의 지도 레시피 자동 삭제 여부, 사용여부 Y/N으로 처리");
        delGbnGroup.setUseYn(autoDeleteEnabled ? "Y" : "N");
        comCdMapper.updateComGroupCd(delGbnGroup);

        // 2. 삭제 주기 업데이트 (MRB_RECIPE_DEL_CYC - 선택된 것만 Y, 나머지는 N)
        List<ComCdVO> delCycList = comCdMapper.getComCdByGroupCd("MRB_RECIPE_DEL_CYC");
        for (ComCdVO code : delCycList) {
            ComCdVO updateVo = new ComCdVO();
            updateVo.setGroupCd("MRB_RECIPE_DEL_CYC");
            updateVo.setCd(code.getCd());
            updateVo.setCdNm(code.getCdNm());
            updateVo.setCdExpln(code.getCdExpln());
            updateVo.setCdSortSeq(code.getCdSortSeq());
            updateVo.setUpCd(code.getUpCd());
            updateVo.setUseYn(code.getCd().equals(deletePeriod) ? "Y" : "N");

            comCdMapper.updateComCd(updateVo);
        }

        log.info("레시피 설정 저장 완료 - userId: {}", userId);

        response.put("success", true);
        response.put("message", "설정이 저장되었습니다.");
        return ResponseEntity.ok(response);
    }

}
