package incheon.ags.ias.myAuthrtAply.web;

import incheon.ags.ias.myAuthrtAply.service.MyAuthrtAplyService;
import incheon.ags.ias.myAuthrtAply.vo.MyAuthrtAplyVO;
import incheon.ags.ias.myAuthrtAply.web.dto.MyAuthrtAplyRequestDTO;
import incheon.com.cmm.api.DefaultApiResponse;
import incheon.com.cmm.context.RequestContext;
import incheon.com.cmm.exception.BusinessException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

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


@RestController
@RequiredArgsConstructor
@Slf4j
public class MyAuthrtAplyApiController {
    
    private final MyAuthrtAplyService myAuthrtAplyService;

    @PostMapping("/ags/ias/myAuthrtAply/myAuthrtAplyAction.do")
    @ResponseBody
    public ResponseEntity<DefaultApiResponse<MyAuthrtAplyVO>> myAuthrtAplyAction(
            @RequestBody MyAuthrtAplyRequestDTO myAuthrtAplyRequestDTO) throws Exception {

            log.info("신청 역할 목록: {}", myAuthrtAplyRequestDTO.getRoleCdList());

            // 현재 접속한 사용자 ID 설정
            String currentUserId = RequestContext.getCurrentUserId();
            if (currentUserId == null) {
                currentUserId = "system";
            }

            MyAuthrtAplyVO myAuthrtAplyVO = myAuthrtAplyRequestDTO.toEntity();

            myAuthrtAplyVO.setAplcnUserId(currentUserId);
            myAuthrtAplyVO.setFrstRegId(currentUserId);
            myAuthrtAplyVO.setLastMdfcnId(currentUserId);

            log.info("권한 신청 요청: {}", myAuthrtAplyVO);

            int result = myAuthrtAplyService.processRoleApplication(myAuthrtAplyVO,myAuthrtAplyRequestDTO.getRoleCdList());

            if(result <= 0){
                throw new BusinessException("역할 신청에 실패했습니다.");
            }

            log.info("역할 신청 성공");

        return  ResponseEntity.ok(
                DefaultApiResponse.success(myAuthrtAplyVO, "역할 신청이 완료되었습니다.")
        );
    }

    /**
     * 권한 신청 프리셋 정보 조회 (최근 신청 정보)
     * @param sysCd 시스템 코드
     * @return 최근 신청 정보 (시작일, 종료일, 신청사유)
     */
    @GetMapping("/ags/ias/myAuthrtAply/selectLatestAply.do")
    @ResponseBody
    public Map<String, Object> selectLatestAply(@RequestParam("sysCd") String sysCd) {
        Map<String, Object> result = new HashMap<>();

        try {
            String currentUserId = RequestContext.getCurrentUserId();
            log.info("권한 신청 프리셋 조회 - userId: {}, sysCd: {}", currentUserId, sysCd);

            MyAuthrtAplyVO vo = new MyAuthrtAplyVO();
            vo.setUserId(currentUserId);
            vo.setSysCd(sysCd);

            Map<String, Object> latestAply = myAuthrtAplyService.selectLatestAply(vo);

            result.put("success", true);
            result.put("latestAply", latestAply);
            result.put("message", "조회 성공");

            log.info("프리셋 데이터: {}", latestAply != null ? "있음" : "없음");

        } catch (Exception e) {
            log.error("권한 신청 프리셋 조회 실패", e);
            result.put("success", false);
            result.put("message", "조회 실패: " + e.getMessage());
        }

        return result;
    }
}
