package io.delphiplatform.api.v3.view;

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.util.OffsetBasedPageRequest;
import io.delphiplatform.api.v3.model.Playlist;
import io.delphiplatform.api.v3.model.Playlists;
import io.delphiplatform.api.v3.model.SortOrder;
import io.delphiplatform.api.v3.rdb.service.PlaylistService;

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

    private final PlaylistService playlistService;

    public PlaylistsApiController(PlaylistService playlistService) {
        this.playlistService = playlistService;
    }

    @Override
    public ResponseEntity<Playlist> findOne(String playlistId) {
        return ResponseEntity.ok(playlistService.findOne(playlistId));
    }

    @Override
    public ResponseEntity<Playlists> getSearchData(List<String> dsps, Integer limit, Integer offset, String sortBy, SortOrder sortOrder) {
        List<Playlist> items = playlistService
            .findByDsp(dsps, OffsetBasedPageRequest.ofParamsKeepCase(offset, limit, sortOrder, sortBy));
        return ResponseEntity.ok(new Playlists().items(items).count(items.size()));
    }
}
