package incheon.ags.ias.myAuthrtAplyHstry.web;

import incheon.ags.ias.myAuthrtAplyHstry.service.MyAuthrtAplyHstryService;
import incheon.ags.ias.myAuthrtAplyHstry.vo.MyAuthrtAplyHstryVO;
import incheon.ags.ias.myAuthrtAplyHstry.web.dto.MyAuthrtAplyHstryRequestDTO;
import incheon.ags.ias.user.service.UserService;
import incheon.com.cmm.api.DefaultApiResponse;
import incheon.com.cmm.exception.BusinessException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;

@Controller
@RequiredArgsConstructor
@Slf4j
public class MyAuthrtAplyHstryApiController {
    private final MyAuthrtAplyHstryService myAuthrtAplyHstryService;
    private final UserService userService;

    @PutMapping("/ags/ias/myAuthrtAplyHstry/myAuthrtAplyCancleAction/{aplySn}")
    public ResponseEntity<DefaultApiResponse<Object>> myAuthrtAplyDeleteAction(
            @PathVariable Long aplySn,
            @RequestBody MyAuthrtAplyHstryRequestDTO myAuthrtAplyHstryRequestDTO) throws Exception {

        log.info("역할 신청 취소 - 신청번호: {}",aplySn);

        if (aplySn == null) {
            throw new BusinessException("취소할 신청 번호가 없습니다.");
        }

        MyAuthrtAplyHstryVO myAuthrtAplyHstryVO = myAuthrtAplyHstryRequestDTO.toEntity();
        myAuthrtAplyHstryVO.setAplySn(aplySn);
        MyAuthrtAplyHstryVO checkAply = myAuthrtAplyHstryService.selectUserMyRoleAplyDetail(myAuthrtAplyHstryVO);

        if (checkAply == null) {
            throw new BusinessException("취소할 신청을 찾을 수 없습니다.");
        }

        int result = myAuthrtAplyHstryService.cancleMyRoleAply(myAuthrtAplyHstryVO);

        if (result <= 0) {
            throw new BusinessException("요청 취소에 실패했습니다.");
        }

        return ResponseEntity.ok(
                DefaultApiResponse.success("역할 요청이 성공적으로 취소되었습니다.")
        );
    }

}
