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

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

import java.util.concurrent.CompletableFuture;

import io.delphiplatform.api.v3.bigtable.BigtableTikTokIsrcTopSoundService;
import io.delphiplatform.api.v3.model.tiktok.top.TikTokTopChartTrackStates;
import io.delphiplatform.api.v3.model.tiktok.top.TikTokTopCharts;
import io.delphiplatform.api.v3.model.tiktok.top.TikTokTopTracksAnalytics;
import io.delphiplatform.api.v3.model.tiktok.top.sound.TikTokTopIsrcSoundsItems;
import io.delphiplatform.api.v3.model.tiktok.top.video.TikTokTopIsrcVideos;
import io.delphiplatform.api.v3.rdb.service.tiktok.TikTokTopTrackChartsService;
import io.delphiplatform.api.v3.rdb.service.tiktok.TikTokTopTracksService;
import io.delphiplatform.api.v3.rdb.service.tiktok.video.TikTokIsrcTopVideoService;
import io.delphiplatform.api.v3.view.util.Params;

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

    private final TikTokTopTrackChartsService tiktokTopTrackChartsService;

    private final TikTokTopTracksService tiktokTopTracksService;

    private final TikTokIsrcTopVideoService tikTokIsrcTopVideoService;

    private final BigtableTikTokIsrcTopSoundService bigtableTikTokIsrcTopSoundService;

    public TikTokTopApiController(TikTokTopTrackChartsService tiktokTopTrackChartsService, TikTokTopTracksService tiktokTopTracksService,
        TikTokIsrcTopVideoService tikTokIsrcTopVideoService, BigtableTikTokIsrcTopSoundService bigtableTikTokIsrcTopSoundService) {
        this.tiktokTopTrackChartsService = tiktokTopTrackChartsService;
        this.tiktokTopTracksService = tiktokTopTracksService;
        this.tikTokIsrcTopVideoService = tikTokIsrcTopVideoService;
        this.bigtableTikTokIsrcTopSoundService = bigtableTikTokIsrcTopSoundService;
    }

    @Override
    public ResponseEntity<TikTokTopCharts> getTikTokTracksCharts(Params params) {
        return ResponseEntity.ok(tiktokTopTrackChartsService.getTikTokTopCharts(params));
    }

    @Override
    public ResponseEntity<TikTokTopChartTrackStates> getTikTokTopTracks(Params params) {
        return ResponseEntity.ok(tiktokTopTracksService.getTikTokTopTracks(params));
    }

    @Override
    public ResponseEntity<TikTokTopTracksAnalytics> getTikTokTopTracksAnalytics(Params params) {
        return ResponseEntity.ok(tiktokTopTracksService.getTikTokTopTracksAnalytics(params));
    }

    @Override
    public ResponseEntity<TikTokTopIsrcVideos> getTikTokTopVideos(Params params) {
        return ResponseEntity.ok(tikTokIsrcTopVideoService.getTopVideosForIsrc(params));
    }

    @Override
    public CompletableFuture<ResponseEntity<TikTokTopIsrcSoundsItems>> getTikTokTopIsrcSounds(Params params) {
        return bigtableTikTokIsrcTopSoundService.getTopSoundsForIsrc(params).thenApply(ResponseEntity::ok);
    }

}
