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

import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.context.request.NativeWebRequest;

import java.util.Optional;

import javax.validation.Valid;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;

import io.delphiplatform.api.v3.constant.ApplicationConstants;
import io.delphiplatform.api.v3.model.localization.RegionLocalizations;
import io.delphiplatform.api.v3.view.util.Params;
import io.delphiplatform.api.v3.view.interceptor.OnlyDeclaredParams;

@Validated
public interface RegionLocalizationsApi {

    default Optional<NativeWebRequest> getRequest() {
        return Optional.empty();
    }

    @OnlyDeclaredParams
    @RequestMapping(value = "/localization/regions",
        produces = {"application/json"},
        method = RequestMethod.GET)
    default ResponseEntity<RegionLocalizations> regionsSearch(
        @Min(0) @Max(ApplicationConstants.MAX_PAGE_SIZE) @Valid
        @RequestParam(value = "limit", required = false) Integer limit,
        @Min(0) @Valid
        @RequestParam(value = "offset", required = false) Integer offset
    ) {
        Params params = Params.builder()
            .limit(limit)
            .offset(offset)
            .build();
        return getSearchData(params);
    }

    ResponseEntity<RegionLocalizations> getSearchData(Params params);

}
