package io.delphiplatform.api.v3.view;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.context.request.NativeWebRequest;

import java.util.Optional;

import io.delphiplatform.api.v3.model.HealthCheckResponseBody;

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

    private final NativeWebRequest request;

    @Value("${app.version}")
    private String applicationVersion;

    @Value("${delphi.environment}")
    private String applicationEnvironment;

    @Value("${delphi.bigtable.instance-id}")
    private String bigtableInstanceId;

    @Value("${delphi.postgres.cluster-id}")
    private String postgresClusterId;

    @Value("${delphi.revision}")
    private String revision;

    @Autowired
    public HealthApiController(NativeWebRequest request) {
        this.request = request;
    }

    @Override
    public Optional<NativeWebRequest> getRequest() {
        return Optional.ofNullable(request);
    }

    @Override
    public ResponseEntity<HealthCheckResponseBody> healthGet() {
        HealthCheckResponseBody responseBody = new HealthCheckResponseBody();
        responseBody.setStatus("UP");
        responseBody.setApiVersion(applicationVersion);
        responseBody.setEnvironment(applicationEnvironment);
        responseBody.setBigtableInstanceId(bigtableInstanceId);
        responseBody.setPostgresClusterId(postgresClusterId);
        responseBody.setRevision(revision);
        return ResponseEntity.ok(responseBody);
    }
}
