package com.kamco.cd.kamcoback.mapsheet;

import com.kamco.cd.kamcoback.code.dto.CommonCodeDto;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto;
import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto;
import com.kamco.cd.kamcoback.mapsheet.service.MapSheetMngService;
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 io.swagger.v3.oas.annotations.tags.Tag;
import java.time.Year;
import java.util.List;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Tag(name = "영상 관리", description = "영상 관리 API")
@RestController
@RequiredArgsConstructor
@RequestMapping({"/api/v2/mapsheet"})
public class MapSheetMngApiV2Controller {

  private final MapSheetMngService mapSheetMngService;

  @Operation(summary = "영상 데이터 관리 년도 목록", description = "영상 데이터 관리 년도 목록")
  @ApiResponses(
      value = {
        @ApiResponse(
            responseCode = "200",
            description = "조회 성공",
            content =
                @Content(
                    mediaType = "application/json",
                    schema = @Schema(implementation = CommonCodeDto.Basic.class))),
        @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content),
        @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
      })
  @GetMapping("/mng-year-list")
  public ApiResponseDto<MapSheetMngDto.ResisterYearList> getListMapListYYYYLimit10() {

    List<Integer> years = mapSheetMngService.getListMapListYYYYLimit10();
    // 현재 년도 가져온다
    int currentYear = Year.now().getValue();

    // 현재년도와 같거나 큰 년도를 가져온다.
    Optional<Integer> result = years.stream().filter(y -> y >= currentYear).min(Integer::compareTo);

    return ApiResponseDto.ok(new MapSheetMngDto.ResisterYearList(result.orElse(null), years));
  }
}
