package incheon.sgp.ipd.eduresource.service.impl;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import incheon.ags.mrb.analysis.mapper.AnalysisHistoryMapper;
import incheon.sgp.ipd.edulife.vo.MedicalFacilityVO;
import incheon.sgp.ipd.eduresource.mapper.EduResourceMapper;
import incheon.sgp.ipd.eduresource.service.EduResouceService;
import incheon.sgp.ipd.eduresource.vo.ChildcareVO;
import incheon.sgp.ipd.eduresource.vo.ElementarySchoolVO;
import incheon.sgp.ipd.eduresource.vo.HighSchoolVO;
import incheon.sgp.ipd.eduresource.vo.KindergartenVO;
import incheon.sgp.ipd.eduresource.vo.SchoolDistrictVO;
import incheon.sgp.ipd.eduresource.vo.SchoolVO;
import incheon.sgp.ipd.eduresource.vo.MiddleSchoolVO;
import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class EduResourceServiceImpl extends EgovAbstractServiceImpl implements EduResouceService{
    private final EduResourceMapper mapper;
    @Autowired private ObjectMapper objectMapper;

	@Override
	public SchoolDistrictVO getMiddleSchoolDistrict(String latitude, String longitude) throws JsonMappingException, JsonProcessingException {
		SchoolDistrictVO vo = mapper.selectMiddleSchoolDistrict(latitude,longitude);
	    if (vo.getGeom() != null) {
            JsonNode geoJsonNode = null;
			geoJsonNode = objectMapper.readTree(vo.getGeom());

            vo.setGeomNode(geoJsonNode); // geomNode는 별도 JsonNode 필드
        }
	    return vo;
	}
	@Override
	public SchoolDistrictVO getHighSchoolDistrict(String latitude, String longitude) throws JsonMappingException, JsonProcessingException {
		SchoolDistrictVO vo = mapper.selectHighSchoolDistrict(latitude,longitude);
	    if (vo.getGeom() != null) {
            JsonNode geoJsonNode = null;
			geoJsonNode = objectMapper.readTree(vo.getGeom());

            vo.setGeomNode(geoJsonNode); // geomNode는 별도 JsonNode 필드
        }
	    return vo;
	}
	
	@Override
	public SchoolDistrictVO getElementarySchoolDistrict(String latitude, String longitude) throws JsonMappingException, JsonProcessingException {
		SchoolDistrictVO vo = mapper.selectElementarySchoolDistrict(latitude,longitude);
	    if (vo.getGeom() != null) {
            JsonNode geoJsonNode = null;
			geoJsonNode = objectMapper.readTree(vo.getGeom());
            vo.setGeomNode(geoJsonNode); // geomNode는 별도 JsonNode 필드
        }
	    return vo;
	}
	
	@Override
	public List<SchoolVO> getSchoolByRadius(double latitude, double longitude, double radius, int offset, int limit, String type) {
		List<SchoolVO> list = mapper.getSchoolListByRadius(latitude,longitude,radius,offset,limit,type);
        List<SchoolVO> result = new ArrayList<>();

        for (SchoolVO vo : list) {
            result.add(vo);
        }

        return result;
	}
	
	@Override
	public List<SchoolVO> getSchoolByRadiusAll(double latitude, double longitude, double radius, int offset, int limit) {
		List<SchoolVO> list = mapper.getSchoolListByRadiusAll(latitude,longitude,radius,offset,limit);
        List<SchoolVO> result = new ArrayList<>();

        for (SchoolVO vo : list) {
            result.add(vo);
        }

        return result;
	}
	
	@Override
	public List<KindergartenVO> getKindergartenByRadius(double latitude, double longitude, double radius, int offset,
			int limit) {
		List<KindergartenVO> list = mapper.getKindergartenByRadius(latitude,longitude,radius,offset,limit);
        List<KindergartenVO> result = new ArrayList<>();

        for (KindergartenVO vo : list) {
            result.add(vo);
        }

        return result;
	}
	@Override
	public List<ChildcareVO> getChildcareCenterByRadius(double latitude, double longitude, double radius, int offset,
			int limit) {
		List<ChildcareVO> list = mapper.getChildcareCenterByRadius(latitude,longitude,radius,offset,limit);
        List<ChildcareVO> result = new ArrayList<>();

        for (ChildcareVO vo : list) {
            result.add(vo);
        }

        return result;
	}
	@Override
	public SchoolVO findSchoolByInfo(double latitude, double longitude, String name, String type) {
		SchoolVO school = mapper.findSchoolByInfo(latitude,longitude,name,type);
		return school;
	}
	@Override
	public ChildcareVO findChildcareByInfo(double latitude, double longitude, String name) {
		ChildcareVO childcare = mapper.findChildcareByInfo(latitude,longitude,name);
		return childcare;
	}
	@Override
	public KindergartenVO findKindergartenByInfo(double latitude, double longitude, String name) {
		KindergartenVO kindergarten = mapper.findKindergartenByInfo(latitude,longitude,name);
		return kindergarten;
	}

}
