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 io.delphiplatform.api.v3.model.video.VideoChartPosition;
import io.delphiplatform.api.v3.model.video.VideoChartPositionSummaries;
import io.delphiplatform.api.v3.model.video.VideoChartPositionSummary;
import io.delphiplatform.api.v3.model.video.VideoChartPositions;
import io.delphiplatform.api.v3.rdb.service.VideoPositionService;
import io.delphiplatform.api.v3.rdb.service.VideoPositionSummaryService;
import io.delphiplatform.api.v3.view.util.Params;

@Controller
@RequestMapping("${openapi.theDelphi.base-path:/v3}")
public class VideoPositionsApiController implements VideoPositionsApi {

    private final VideoPositionService videoPositionService;
    private final VideoPositionSummaryService videoPositionSummaryService;

    public VideoPositionsApiController(VideoPositionService videoPositionService,
        VideoPositionSummaryService videoPositionSummaryService) {
        this.videoPositionService = videoPositionService;
        this.videoPositionSummaryService = videoPositionSummaryService;
    }

    @Override
    public ResponseEntity<VideoChartPositions> getVideoChartPositions(Params params) {
        List<VideoChartPosition> positions = videoPositionService.getVideoChartPositions(params);
        return ResponseEntity.ok(new VideoChartPositions()
            .count(positions.size())
            .items(positions)
            .nextCursor(params.getNextCursor())
        );
    }

    @Override
    public ResponseEntity<VideoChartPositionSummaries> getVideoPositionsChartsSummarySearch(Params params) {
        List<VideoChartPositionSummary> summaries = videoPositionSummaryService.getVideoChartPositionSummaries(params);
        return ResponseEntity.ok(new VideoChartPositionSummaries()
            .count(summaries.size())
            .items(summaries)
        );
    }
}
