package incheon.com.userPageStrg.web;

import incheon.com.cmm.api.DefaultApiResponse;
import incheon.com.cmm.context.RequestContext;
import incheon.com.userPageStrg.service.UserPageStrgService;
import incheon.com.userPageStrg.vo.UserPageStrgVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

/**
 * 사용자 페이지 저장 REST API Controller
 */
@Slf4j
@RestController
@RequestMapping("/api/common/user-page-strg")
@RequiredArgsConstructor
public class UserPageStrgApiController {

    private final UserPageStrgService userPageStrgService;

    /**
     * 사용자 페이지 설정 조회
     * GET /api/common/user-page-strg?pageCd=AGS_MAIN
     */
    @GetMapping
    public DefaultApiResponse<UserPageStrgVO> getUserPageStrg(
            @RequestParam String pageCd) {

        try {
            // RequestContext에서 사용자 ID 가져오기
            String userId = RequestContext.getCurrentUserId();
            if (userId == null) {
                userId = "ANONYMOUS";
            }
            log.info("사용자 페이지 설정 조회 API - userId: {}, pageCd: {}", userId, pageCd);

            UserPageStrgVO vo = userPageStrgService.getUserPageStrg(userId, pageCd);

            return DefaultApiResponse.success(vo);

        } catch (Exception e) {
            log.error("사용자 페이지 설정 조회 오류", e);
            return DefaultApiResponse.error(
                    HttpStatus.INTERNAL_SERVER_ERROR.value(),
                    "설정을 불러올 수 없습니다: " + e.getMessage(),
                    e.getClass().getSimpleName()
            );
        }
    }

    /**
     * 사용자 페이지 설정 저장
     * POST /api/common/user-page-strg
     */
    @PostMapping
    public DefaultApiResponse<UserPageStrgVO> saveUserPageStrg(
            @RequestBody UserPageStrgVO vo) {

        try {
            // RequestContext에서 사용자 ID 가져오기
            String userId = RequestContext.getCurrentUserId();
            if (userId == null) {
                userId = "ANONYMOUS";
            }
            log.info("사용자 페이지 설정 저장 API - userId: {}, pageCd: {}", userId, vo.getPageCd());

            // 사용자 ID 설정
            vo.setUserId(userId);
            vo.setFrstRegId(userId);
            vo.setLastMdfcnId(userId);

            userPageStrgService.saveUserPageStrg(vo);

            return DefaultApiResponse.success(vo, "설정이 저장되었습니다.");

        } catch (Exception e) {
            log.error("사용자 페이지 설정 저장 오류", e);
            return DefaultApiResponse.error(
                    HttpStatus.INTERNAL_SERVER_ERROR.value(),
                    "설정 저장에 실패했습니다: " + e.getMessage(),
                    e.getClass().getSimpleName()
            );
        }
    }

    /**
     * 사용자 페이지 설정 삭제
     * DELETE /api/common/user-page-strg?pageCd=AGS_MAIN
     */
    @DeleteMapping
    public DefaultApiResponse<Void> deleteUserPageStrg(
            @RequestParam String pageCd) {

        try {
            // RequestContext에서 사용자 ID 가져오기
            String userId = RequestContext.getCurrentUserId();
            if (userId == null) {
                userId = "ANONYMOUS";
            }
            log.info("사용자 페이지 설정 삭제 API - userId: {}, pageCd: {}", userId, pageCd);

            userPageStrgService.deleteUserPageStrg(userId, pageCd);

            return DefaultApiResponse.success("설정이 삭제되었습니다.");

        } catch (Exception e) {
            log.error("사용자 페이지 설정 삭제 오류", e);
            return DefaultApiResponse.error(
                    HttpStatus.INTERNAL_SERVER_ERROR.value(),
                    "설정 삭제에 실패했습니다: " + e.getMessage(),
                    e.getClass().getSimpleName()
            );
        }
    }
}
