package gc.mda.kcg.domain.sensor;

import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/api/sensor")
@RequiredArgsConstructor
public class SensorController {

    private final SeismicEventRepository seismicRepo;
    private final PressureReadingRepository pressureRepo;

    /**
     * 지진 이벤트 조회 (USGS 수집 데이터)
     * @param min 조회 범위 (분 단위, 기본 2880 = 48시간)
     */
    @GetMapping("/seismic")
    public Map<String, Object> getSeismic(
            @RequestParam(defaultValue = "2880") int min) {
        Instant since = Instant.now().minus(min, ChronoUnit.MINUTES);
        List<SensorDto.SeismicDto> data = seismicRepo
                .findByEventTimeAfterOrderByEventTimeDesc(since)
                .stream().map(SensorDto.SeismicDto::from).toList();
        return Map.of("count", data.size(), "data", data);
    }

    /**
     * 기압 데이터 조회 (Open-Meteo 수집 데이터)
     * @param min 조회 범위 (분 단위, 기본 2880 = 48시간)
     */
    @GetMapping("/pressure")
    public Map<String, Object> getPressure(
            @RequestParam(defaultValue = "2880") int min) {
        Instant since = Instant.now().minus(min, ChronoUnit.MINUTES);
        List<SensorDto.PressureDto> data = pressureRepo
                .findByReadingTimeAfterOrderByReadingTimeAsc(since)
                .stream().map(SensorDto.PressureDto::from).toList();
        return Map.of("count", data.size(), "data", data);
    }
}
