package incheon.sgp.ipd.edulife.web;

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

import javax.servlet.http.HttpSession;

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.vo.AcademyVO;
import incheon.sgp.ipd.edulife.service.MedicalFacilityService;
import incheon.sgp.ipd.edulife.vo.MedicalFacilityVO;
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
@Slf4j
@RequiredArgsConstructor
@RequestMapping("/sgp/ipd/edulife")
public class MedicalFacilityApiController {
	private final MedicalFacilityService medicalFacilityService;


	@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("/getMedicalService")
	public ResponseEntity<DefaultApiResponse<List<MedicalFacilityVO>>> getMedicalListByRadius(
			@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,
			HttpSession session,
			ModelMap model) throws Exception {

        
		List<MedicalFacilityVO> resultList = new ArrayList<>();
		resultList = medicalFacilityService.getMedicalFacilityListByRadius(latitude,longitude,radius,offset,limit);
					
        DefaultApiResponse<List<MedicalFacilityVO>> response =
                DefaultApiResponse.success(resultList);
        
        return ResponseEntity.ok(response);
	}
	
	
	@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("/getPediatric")
	public ResponseEntity<DefaultApiResponse<List<MedicalFacilityVO>>> getPediatricCareList(
			@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,
			HttpSession session,
			ModelMap model) throws Exception {
		
        
		List<MedicalFacilityVO> resultList = new ArrayList<>();
		resultList = medicalFacilityService.getPediatricCareListByRadius(latitude,longitude,radius,offset,limit);
					
        DefaultApiResponse<List<MedicalFacilityVO>> response =
                DefaultApiResponse.success(resultList);
        
        return ResponseEntity.ok(response);
	}
	
	@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("/findMedicalService")
	public ResponseEntity<DefaultApiResponse<MedicalFacilityVO>> findMedicalFacility(
			@RequestParam double latitude,
		    @RequestParam double longitude,
		    String name
		) throws Exception {

        
		MedicalFacilityVO medicalFacility;
		medicalFacility = medicalFacilityService.findMedicalFacilityByInfo(latitude,longitude,name);
					
        DefaultApiResponse<MedicalFacilityVO> response =
                DefaultApiResponse.success(medicalFacility);
        
        return ResponseEntity.ok(response);
	}
	
	@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("/findPediatric")
	public ResponseEntity<DefaultApiResponse<MedicalFacilityVO>> findPediatricCare(
			@RequestParam double latitude,
		    @RequestParam double longitude,
		    String name
		) throws Exception {

        
		MedicalFacilityVO medicalFacility;
		medicalFacility = medicalFacilityService.findPediatricCareByInfo(latitude,longitude,name);
					
        DefaultApiResponse<MedicalFacilityVO> response =
                DefaultApiResponse.success(medicalFacility);
        
        return ResponseEntity.ok(response);
	}
}
