package io.delphiplatform.api.integration.container;

import org.testcontainers.containers.BigtableEmulatorContainer;
import org.testcontainers.utility.DockerImageName;

import io.delphiplatform.api.integration.util.EnvUtils;

public class DelphiBigtableContainer extends BigtableEmulatorContainer {

    private static final String BIGTABLE_EMU_IMAGE_NAME = "gcr.io/google.com/cloudsdktool/cloud-sdk:367.0.0-emulators";

    private static DelphiBigtableContainer container;

    private DelphiBigtableContainer() {
        super(DockerImageName.parse(BIGTABLE_EMU_IMAGE_NAME));
    }

    public static DelphiBigtableContainer getInstance() {
        if (container == null) {
            container = new DelphiBigtableContainer();
        }

        return container;
    }

    @Override
    public void start() {
        super.start();
        EnvUtils.setEnvVar(EnvUtils.ENV_VAR_TEST_BT_HOST, container.getHost());
        EnvUtils.setEnvVar(EnvUtils.ENV_VAR_TEST_BT_PORT, String.valueOf(container.getEmulatorPort()));
        EnvUtils.setEnvVar(EnvUtils.ENV_VAR_TEST_BT_ENDPOINT, String.valueOf(container.getEmulatorEndpoint()));
    }

    @Override
    public void stop() {
        //container is needed through whole tests run lifecycle, will be stopped by testcontainers shutdown hooks
    }
}
