package incheon.product.geoview3d.simulation.web;

import incheon.com.cmm.api.DefaultApiResponse;
import incheon.product.geoview3d.simulation.service.SimulationService;
import incheon.product.geoview3d.simulation.vo.SubwayVO;
import incheon.product.geoview3d.simulation.vo.TilesetClippingVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * GeoView-3D 시뮬레이션 API. 시뮬레이션 JSON, 클리핑, 지하철 데이터를 제공한다.
 */
@Slf4j
@RestController
@RequestMapping("/api/v1/product/g3d/simulation")
public class SimulationApiController {

    @Resource(name = "productSimulationService")
    private SimulationService simulationService;

    @GetMapping(value = "/{simId}", produces = MediaType.APPLICATION_JSON_VALUE)
    public String getSimulationJson(@PathVariable String simId) {
        return simulationService.getSimulationJson(simId);
    }

    @GetMapping("/clipping/{clipId}")
    public ResponseEntity<DefaultApiResponse<TilesetClippingVO>> getClipping(@PathVariable String clipId) {
        TilesetClippingVO clipping = simulationService.getClipping(clipId);
        if (clipping == null) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND)
                    .body(DefaultApiResponse.error(404, "클리핑 정보를 찾을 수 없습니다: " + clipId, "Not Found"));
        }
        return ResponseEntity.ok(DefaultApiResponse.success(clipping));
    }

    @GetMapping("/subway")
    public ResponseEntity<DefaultApiResponse<SubwayVO>> getSubway(@RequestParam String subwayName) {
        SubwayVO subway = simulationService.getSubway(subwayName);
        if (subway == null) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND)
                    .body(DefaultApiResponse.error(404, "지하철 노선을 찾을 수 없습니다: " + subwayName, "Not Found"));
        }
        return ResponseEntity.ok(DefaultApiResponse.success(subway));
    }
}
