package io.delphiplatform.api.v3.bigtable.processing;

import org.springframework.stereotype.Service;

import java.util.stream.Stream;

import fr.xebia.extras.selma.Selma;
import io.delphiplatform.api.v3.bigtable.entity.PlaylistPosition;
import io.delphiplatform.api.v3.bigtable.entity.PlaylistPublicPosition;
import io.delphiplatform.api.v3.model.mapper.PlaylistTrackPositionMapper;
import io.delphiplatform.api.v3.model.trackposition.PlaylistTrackPosition;
import io.delphiplatform.api.v3.model.trackposition.PlaylistsTrackPositionsCurrentTracklist;
import io.delphiplatform.api.v3.model.trackposition.PublicPlaylistTrackPosition;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class TrackPositionConverter {

    private final PlaylistTrackPositionMapper playlistTrackPositionMapper;

    public TrackPositionConverter() {
        playlistTrackPositionMapper = Selma.builder(PlaylistTrackPositionMapper.class).build();
    }

    @Deprecated
    public Stream<PlaylistTrackPosition> convertPlaylistPositions(Stream<PlaylistPosition> models) {
        return models.map(playlistTrackPositionMapper::toTrackPosition);
    }

    public Stream<PublicPlaylistTrackPosition> convertPublicPlaylistPositions(Stream<PlaylistPublicPosition> models) {
        return models.map(playlistTrackPositionMapper::toTrackPublicPosition);
    }

    public Stream<PlaylistsTrackPositionsCurrentTracklist> convertPlaylistPositionsToCurrentTracklist(
        Stream<PublicPlaylistTrackPosition> metrics) {
        return metrics.map(c -> {
            PlaylistsTrackPositionsCurrentTracklist trackPublicPosition = playlistTrackPositionMapper.toCurrentTrackPublicPosition(c);
            trackPublicPosition.setSpotifyTrack(c.getSpotifyTrack());
            trackPublicPosition.setStreamingInfo(c.getStreamingInfo());
            return trackPublicPosition;
        });
    }
}
