package gc.mda.signal_batch.domain.ship.service;

import gc.mda.signal_batch.domain.ship.dto.ShipImageDto;
import gc.mda.signal_batch.domain.ship.repository.ShipImageRepository;
import gc.mda.signal_batch.domain.ship.repository.ShipImageRepository.ShipImageRawData;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Slf4j
@Service
@RequiredArgsConstructor
public class ShipImageService {

    private final ShipImageRepository shipImageRepository;

    /**
     * IMO로 이미지 정보 목록 조회
     *
     * @param imo IMO 번호
     * @return 이미지 정보 목록 (없으면 빈 배열)
     */
    public List<ShipImageDto> getImagesByImo(Integer imo) {
        List<ShipImageRawData> rawDataList = shipImageRepository.findByImo(imo);

        return rawDataList.stream()
                .map(this::toDto)
                .collect(Collectors.toList());
    }

    /**
     * Raw 데이터를 DTO로 변환
     */
    private ShipImageDto toDto(ShipImageRawData rawData) {
        return ShipImageDto.builder()
                .picId(rawData.picId)
                .path(buildImagePath(rawData.picId))
                .copyright(rawData.copyright)
                .date(rawData.dateOfPhoto)
                .build();
    }

    /**
     * pic_id로 이미지 경로 생성
     * 규칙: 폴더명 = pic_id / 100
     * 예: pic_id=816100 → /shipimg/8161/816100
     *
     * @param picId pic_id
     * @return 이미지 경로
     */
    private String buildImagePath(Integer picId) {
        int folderName = picId / 100;
        return String.format("/shipimg/%d/%d", folderName, picId);
    }
}
