package incheon.sgp.ipd.academy.web;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import incheon.com.cmm.api.DefaultApiResponse;
import incheon.com.security.vo.LoginVO;
import incheon.sgp.ipd.academy.service.AcademyService;
import incheon.sgp.ipd.academy.vo.AcademyVO;
import incheon.sgp.ipd.eduresource.vo.ElementarySchoolVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@RestController
@RequiredArgsConstructor
@Slf4j
@RequestMapping("/sgp/ipd/academy")
public class AcademyApiController {
	@Autowired
	private final AcademyService academyService;
	
	@Operation(summary = "학원 POI 데이터 조회", description = "입력한 키워드에 따른 학원 데이터 반환")
	@ApiResponses(value = {
	            @ApiResponse(responseCode = "200", description = "데이터 조회 성공",
	                    content = @Content(schema = @Schema(implementation = DefaultApiResponse.class))),
	            @ApiResponse(responseCode = "400", description = "요청 파라미터 오류"),
	            @ApiResponse(responseCode = "500", description = "서버 내부 오류")
	})
	@GetMapping("/getAcademy")
	public ResponseEntity<DefaultApiResponse<List<AcademyVO>>> getAcademyListByRadius(
			@RequestParam(defaultValue = "37.455949") double latitude,
		    @RequestParam(defaultValue = "126.705066") double longitude,
		    @RequestParam(defaultValue = "500") double radius,
            @RequestParam(defaultValue = "0") int offset,
            @RequestParam(defaultValue = "5") int limit,
			@RequestParam(defaultValue = "1") int page,
            @RequestParam(defaultValue = "") String category1,
            @RequestParam(defaultValue = "") String category2,
            @RequestParam(defaultValue = "") String category3,
			@ModelAttribute AcademyVO vo,
			HttpSession session,
			ModelMap model) throws Exception {
		
		List<AcademyVO> resultList = new ArrayList<>();

		if (category1.isEmpty() && category2.isEmpty() && category3.isEmpty() ) {
			resultList = academyService.getAcademyListByRadius(latitude,longitude,radius,offset,limit);
			model.addAttribute("resultList",resultList);
						
	        DefaultApiResponse<List<AcademyVO>> response =
	                DefaultApiResponse.success(resultList);
	        
	        return ResponseEntity.ok(response);
		} else {
			resultList = academyService.getAcademyListByRadiusCategory(latitude,longitude,radius,offset,limit,category1,category2,category3);
			model.addAttribute("resultList",resultList);
						
	        DefaultApiResponse<List<AcademyVO>> response =
	                DefaultApiResponse.success(resultList);
	        
	        return ResponseEntity.ok(response);
		}

	}
	
	
	@Operation(summary = "학원 POI 1개 조회", description = "입력한 키워드에 따른 학원 데이터 반환")
	@ApiResponses(value = {
	            @ApiResponse(responseCode = "200", description = "데이터 조회 성공",
	                    content = @Content(schema = @Schema(implementation = DefaultApiResponse.class))),
	            @ApiResponse(responseCode = "400", description = "요청 파라미터 오류"),
	            @ApiResponse(responseCode = "500", description = "서버 내부 오류")
	})
	@GetMapping("/findAcademy")
	public ResponseEntity<DefaultApiResponse<AcademyVO>> findAcademyListByRadius(
			@RequestParam double latitude,
		    @RequestParam double longitude,
		    @RequestParam String name
		) throws Exception {
		
		AcademyVO findAcademy = academyService.findAcademyByInfo(latitude,longitude,name);
		
		DefaultApiResponse<AcademyVO> response = DefaultApiResponse.success(findAcademy);
		return ResponseEntity.ok(response);

	}
}
