package io.delphiplatform.api.v3.view;

import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
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.context.request.NativeWebRequest;

import java.util.Optional;

import io.delphiplatform.api.v3.model.HealthCheckResponseBody;
import io.delphiplatform.api.v3.view.util.ApiUtil;

@Validated

public interface HealthApi {

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

    /**
     * GET /health : get basic environment-specific information about the application
     *
     * @return Successful Response (status code 200) or 500 Internal Error Response (status code 500)
     */
    @RequestMapping(value = "/health",
        produces = {"application/json"},
        method = RequestMethod.GET)
    default ResponseEntity<HealthCheckResponseBody> healthGet() {
        getRequest().ifPresent(request -> {
            for (MediaType mediaType : MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                    String exampleString =
                        "{ \"environment\" : \"stage\", \"api_version\" : \"3.0.0\", \"status\" : \"OK\" }";
                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
                    break;
                }
            }
        });
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);

    }

}
