package kr.xit.ens.ktgbs.web;

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import kr.xit.biz.ens.model.kt.KtCommonDTO;
import kr.xit.biz.ens.model.ktgbs.KtGbsDTO;
import kr.xit.core.model.ApiResponseDTO;
import kr.xit.core.model.IApiResponse;
import kr.xit.ens.ktgbs.service.IKtGbsService;
import lombok.RequiredArgsConstructor;

/**
 * <pre>
 * description : 
 * packageName : kr.xit.ens.ktgbs.web
 * fileName    : KtGbsController
 * author      : limju
 * date        : 2024-08-19
 * ======================================================================
 * 변경일         변경자        변경 내용
 * ----------------------------------------------------------------------
 * 2024-08-19   limju       최초 생성
 *
 * </pre>
 */
@Tag(name = "KtGbsController", description = "KT GIBIS API controller")
@RequiredArgsConstructor
@RestController
@RequestMapping(value = "/api/ens/ktgbs/v1")
public class KtGbsController {
    private final IKtGbsService service;

    @Operation(summary = "본문자 수신 등록 요청", description = "본문자 수신 등록 요청")
    @PostMapping(value = "/mainSend", produces = MediaType.APPLICATION_JSON_VALUE)
    public IApiResponse mainSend(@RequestBody final KtGbsDTO.MsgSendRequest reqDTO) {
        KtCommonDTO.KtCommonResponse dto = service.mainSend(reqDTO);
        return ApiResponseDTO.success(dto);
    }

    @Operation(deprecated = true, summary = "기관용 토큰 발급 요청 -> 업무(Biz)단 API 에서 처리", description = "KT 문서 중개자 정보 DB update가 필요하여 업무단의 API를 사용하여야 함")
    @PostMapping(value = "/requestToken", produces = MediaType.APPLICATION_JSON_VALUE)
    public IApiResponse requestToken(@RequestBody final KtCommonDTO.KtMnsRequest paramDTO) {
        return ApiResponseDTO.success(service.requestToken(paramDTO));
    }

    /**
     * <pre>
     * - 본문자 수신 등록 요청 API 호출시 set한 url
     *   -> OTT token get
     * - 토큰인증확인조회요청 API call
     * - 토큰열람확인결과 전송 API call
     * @param reqDTO TokenConfirmRequest
     * @return KtCommonResponse
     * </pre>
     */
    @Operation(deprecated = true, summary = "토큰인증확인 조회 -> KT GIBIS 모바일 데이타 요청(모바일 페이지에서 호출)에서 처리", description = "토큰인증확인조회요청(BC-AG-SN-008) <br><a href='http://localhost:18090/swagger-ui/index.html?urls.primaryName=6.%20%EC%A0%84%EC%9E%90%EA%B3%A0%EC%A7%80%20%EC%97%85%EB%AC%B4%20API#/MobilePageController'>전자문서중개자모바일페이지</a>")
    @PostMapping(value = "/cfmToken", produces = MediaType.APPLICATION_JSON_VALUE)
    public IApiResponse cfmToken(@RequestBody final KtGbsDTO.TokenConfirmRequest reqDTO) {
        KtCommonDTO.KtCommonResponse dto = service.cfmToken(reqDTO);
        return ApiResponseDTO.success(dto);
    }

    /**
     * <pre>
     * - 본문자 수신 등록 요청(BC-AG-SN-002) API 호출시 set한 url
     *   -> OTT token get
     * - 토큰인증확인조회요청(BC-AG-SN-008) API call
     * - 토큰열람확인결과 전송(BC-AG-SN-009) API call
     * @param reqDTO KtTokenReadRequest
     * @return KtCommonResponse
     * </pre>
     */
    @Operation(deprecated = true, summary = "토큰열람확인결과 전송 -> KT GIBIS 모바일 데이타 요청(모바일 페이지에서 호출)에서 처리", description = "토큰열람확인결과 전송(BC-AG-SN-009) <br><a href='http://localhost:18090/swagger-ui/index.html?urls.primaryName=6.%20%EC%A0%84%EC%9E%90%EA%B3%A0%EC%A7%80%20%EC%97%85%EB%AC%B4%20API#/MobilePageController'>전자문서중개자모바일페이지</a>")
    @PostMapping(value = "/readToken", produces = MediaType.APPLICATION_JSON_VALUE)
    public IApiResponse readToken(@RequestBody final KtGbsDTO.TokenReadRequest reqDTO) {
        KtCommonDTO.KtCommonResponse dto = service.readToken(reqDTO);
        return ApiResponseDTO.success(dto);
    }
}
