package io.delphiplatform.api.v3.view.video;

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;
import java.util.concurrent.CompletableFuture;

import javax.transaction.NotSupportedException;

import io.delphiplatform.api.v3.bigtable.BigtableYouTubeVideoSummariesService;
import io.delphiplatform.api.v3.model.video.VideoSummaryItems;
import io.delphiplatform.api.v3.model.video.YouTubeSummaryItem;
import io.delphiplatform.api.v3.view.util.Params;

@Controller
@RequestMapping("${spring.data.rest.base-path:/v3}")
public class VideoAnalyticsApiController implements VideoAnalyticsApi {

    private final BigtableYouTubeVideoSummariesService summariesService;

    public VideoAnalyticsApiController(BigtableYouTubeVideoSummariesService summariesService) {
        this.summariesService = summariesService;
    }

    @Override
    public CompletableFuture<ResponseEntity<VideoSummaryItems>> getSearchData(Params params)
        throws NotSupportedException {
        CompletableFuture<List<YouTubeSummaryItem>> rows = summariesService.getRows(params);
        return rows
            .thenApply(r -> new VideoSummaryItems()
                .items(r)
                .count(r.size())
                .nextCursor(params.getNextCursor()))
            .thenApply(ResponseEntity::ok);
    }
}
