package incheon.sgp.aat.web;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.client.RestTemplate;

import com.fasterxml.jackson.databind.ObjectMapper;

import incheon.sgp.aat.service.SgpAatService;
import incheon.sgp.aat.vo.SgpAatVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

/**
 * @author : HyeonBin, Kang
 * @version 1.3
 * @Class Name : SgpAatController.java
 * @Description : 건축상 수상작 조회 Controller
 * @Modification Information 
 * 개정일자              개정자                  개정내용
 * ------------------ ----------- --------------------------
 * 2025. 10. 14       HyeonBin, Kang         최초생성
 * <p>
 * Copyright 2025. 올포랜드 INC. All rights reserved.
 * @since : 2025.10.14
 */
@Controller
@RequestMapping("/sgp/aat")
@RequiredArgsConstructor
@Slf4j
public class SgpAatController {

  private final SgpAatService sgpAatService;

  /**
   * 건축상 수상작 메인 화면
   */
  @GetMapping("/main.do")
  public String aatMain(@RequestParam(required = false) Integer yr,
      @RequestParam(required = false) String wnawd_se_se_cd,
      @RequestParam(required = false) String keyword, @RequestParam(required = false) String sgg_cd,
      @RequestParam(required = false) String emd_cd, ModelMap model) throws SQLException {

    
      // 빈 문자열 처리
      wnawd_se_se_cd = normalizeParam(wnawd_se_se_cd);
      keyword = normalizeParam(keyword);
      sgg_cd = normalizeParam(sgg_cd);
      emd_cd = normalizeParam(emd_cd);

      // DB 조회
      List<SgpAatVO> places = sgpAatService.selectAwardList(yr, wnawd_se_se_cd, keyword, sgg_cd, emd_cd);
      List<Integer> yearList = sgpAatService.selectYearList();
      List<SgpAatVO> awardCodeList = sgpAatService.selectAwardCodeList();
      List<SgpAatVO> sggList = sgpAatService.selectSggList();
      List<SgpAatVO> allEmdList = sgpAatService.selectAllEmdList();

      // 모델에 데이터 추가
      model.addAttribute("places", places);
      model.addAttribute("yearList", yearList);
      model.addAttribute("selectedYear", yr);
      model.addAttribute("awardCodeList", awardCodeList);
      model.addAttribute("selectedAwardCode", wnawd_se_se_cd);
      model.addAttribute("keyword", keyword);
      model.addAttribute("sggList", sggList);
      model.addAttribute("selectedSggCd", sgg_cd);
      model.addAttribute("allEmdList", allEmdList);
      model.addAttribute("pageTitle", "인천건축상 수상작");
      model.addAttribute("headerTitle", "인천건축상 수상작");

      return "/sgp/aat/aatMapMain";    
  }

    /**
     * 건축상 수상작 메인 화면
     */
    @GetMapping("/refactor.do")
    public String aatRefactor(@RequestParam(required = false) Integer yr,
                          @RequestParam(required = false) String wnawd_se_se_cd,
                          @RequestParam(required = false) String keyword, @RequestParam(required = false) String sgg_cd,
                          @RequestParam(required = false) String emd_cd, ModelMap model) throws SQLException {

        // 빈 문자열 처리
        wnawd_se_se_cd = normalizeParam(wnawd_se_se_cd);
        keyword = normalizeParam(keyword);
        sgg_cd = normalizeParam(sgg_cd);
        emd_cd = normalizeParam(emd_cd);

        // DB 조회
        List<SgpAatVO> places = sgpAatService.selectAwardList(yr, wnawd_se_se_cd, keyword, sgg_cd, emd_cd);
        List<Integer> yearList = sgpAatService.selectYearList();
        List<SgpAatVO> awardCodeList = sgpAatService.selectAwardCodeList();
        List<SgpAatVO> sggList = sgpAatService.selectSggList();
        List<SgpAatVO> allEmdList = sgpAatService.selectAllEmdList();

        // 모델에 데이터 추가
        model.addAttribute("places", places);
        model.addAttribute("yearList", yearList);
        model.addAttribute("selectedYear", yr);
        model.addAttribute("awardCodeList", awardCodeList);
        model.addAttribute("selectedAwardCode", wnawd_se_se_cd);
        model.addAttribute("keyword", keyword);
        model.addAttribute("sggList", sggList);
        model.addAttribute("selectedSggCd", sgg_cd);
        model.addAttribute("allEmdList", allEmdList);
        model.addAttribute("pageTitle", "인천건축상 수상작");
        model.addAttribute("headerTitle", "인천건축상 수상작");

        return "/sgp/aat/aatMapRefactor";
    }

  // =====================================
  // Private Methods
  // =====================================


  /**
   * 파라미터 정규화 (빈 문자열 → null)
   */
  private String normalizeParam(String param) {
    return (param != null && param.isBlank()) ? null : param;
  }
}
