package incheon.ags.ias.authrtAplyMng.web;

import incheon.ags.ias.authrtAplyMng.service.AuthrtAplyMngService;
import incheon.ags.ias.authrtAplyMng.vo.AuthrtAplyMngVO;
import incheon.ags.ias.authrtAplyMng.web.dto.AuthrtAplyMngRequestDTO;
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.*;

@RestController
@RequiredArgsConstructor
@Slf4j
public class AuthrtAplyMngApiController {
    private final AuthrtAplyMngService authrtAplyMngService;

    @PutMapping("/ags/ias/authrtAplyMng/aprvUserRoleAction.do")
    @ResponseBody
    public ResponseEntity<DefaultApiResponse<AuthrtAplyMngVO>> aprvUserRoleAction(
            @RequestBody AuthrtAplyMngRequestDTO authrtAplyMngRequestDTO) throws Exception {


        log.info("일괄 승인 요청 - 신청 건수: {}", authrtAplyMngRequestDTO.getAplySnList().size());
        log.info("신청 번호 목록: {}", authrtAplyMngRequestDTO.getAplySnList());
        log.info("신청 시스템 목록: {}", authrtAplyMngRequestDTO.getSysCdList());
        log.info("승인 사유: {}", authrtAplyMngRequestDTO.getRvwOpnnCn());

        // 현재 접속한 사용자 ID 설정
        String currentUserId = RequestContext.getCurrentUserId();

        // 일괄 승인 처리
        int result = authrtAplyMngService.approveUserRoleAplyAll(
                authrtAplyMngRequestDTO.getAplySnList(),
                authrtAplyMngRequestDTO.getSysCdList(),
                currentUserId,
                authrtAplyMngRequestDTO.getRvwOpnnCn()
        );

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

        AuthrtAplyMngVO authrtAplyMngVO = authrtAplyMngRequestDTO.toEntity();

        log.info("역할 일괄 승인 성공 - AplySn: {}", authrtAplyMngRequestDTO.getAplySnList());

        return ResponseEntity.ok(
                DefaultApiResponse.success(authrtAplyMngVO, "역할 일괄 승인이 성공적으로 완료되었습니다.")
        );
    }

    @PutMapping("/ags/ias/authrtAplyMng/rjctUserRoleAction.do")
    @ResponseBody
    public ResponseEntity<DefaultApiResponse<AuthrtAplyMngVO>> rjctUserRoleAction(
            @RequestBody AuthrtAplyMngRequestDTO authrtAplyMngRequestDTO) throws Exception {

        log.info("일괄 반려 요청 - 신청 건수: {}", authrtAplyMngRequestDTO.getAplySnList().size());
        log.info("신청 번호 목록: {}", authrtAplyMngRequestDTO.getAplySnList());
        log.info("신청 시스템 목록: {}", authrtAplyMngRequestDTO.getSysCdList());
        log.info("반려 사유: {}", authrtAplyMngRequestDTO.getRvwOpnnCn());

        // 현재 접속한 사용자 ID 설정
        String currentUserId = RequestContext.getCurrentUserId();

        // 일괄 반려 처리
        int result = authrtAplyMngService.rejectUserRoleAplyAll(
                authrtAplyMngRequestDTO.getAplySnList(),
                authrtAplyMngRequestDTO.getSysCdList(),
                currentUserId,
                authrtAplyMngRequestDTO.getRvwOpnnCn()
        );

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

        AuthrtAplyMngVO authrtAplyMngVO = authrtAplyMngRequestDTO.toEntity();

        log.info("역할 일괄 반려 성공 - AplySn: {}", authrtAplyMngRequestDTO.getAplySnList());

        return ResponseEntity.ok(
                DefaultApiResponse.success(authrtAplyMngVO, "역할 일괄 반려가 성공적으로 완료되었습니다.")
        );
    }

    @PutMapping("/ags/ias/authrtAplyMng/aprvUserRoleDetailAction/{aplySn}")
    @ResponseBody
    public ResponseEntity<DefaultApiResponse<AuthrtAplyMngVO>> aprvUserRoleDetailAction(
            @PathVariable Long aplySn,
            @RequestBody AuthrtAplyMngRequestDTO authrtAplyMngRequestDTO) throws Exception {

        // 현재 접속한 사용자 ID 설정
        String currentUserId = RequestContext.getCurrentUserId();


        AuthrtAplyMngVO authrtAplyMngVO = authrtAplyMngRequestDTO.toEntity();

        // 일괄 승인 처리
        int result = authrtAplyMngService.updateUserRoleAply(aplySn, authrtAplyMngRequestDTO.getRoleCdList(), authrtAplyMngVO, currentUserId);

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

        return ResponseEntity.ok(
                DefaultApiResponse.success(authrtAplyMngVO, "역할 신청 승인/반려가 정상적으로 수정되었습니다.")
        );
    }

}
