#!/bin/bash

PROJECT_ROOT="$(readlink -e $(dirname "$BASH_SOURCE[0]")/../)"
source "${PROJECT_ROOT}"/hack/config

TEMP_DIR=`mktemp -d`
WAIT_TIMEOUT="${WAIT_TIMEOUT:-450s}"

CDI_CONTAINER_REGISTRY="${CDI_CONTAINER_REGISTRY:-docker.io/kubevirt}"
KUBEVIRT_CONTAINER_REGISTRY="${KUBEVIRT_CONTAINER_REGISTRY:-docker.io/kubevirt}"
NETWORK_ADDONS_CONTAINER_REGISTRY="${NETWORK_ADDONS_CONTAINER_REGISTRY:-quay.io/kubevirt}"
SSP_CONTAINER_REGISTRY="${SSP_CONTAINER_REGISTRY:-quay.io/fromani}"

CDI_OPERATOR_NAME="${CDI_OPERATOR_NAME:-cdi-operator}"

CDI_DOCKER_PREFIX=`basename "${CDI_CONTAINER_REGISTRY}"`

CONTROLLER_IMAGE="${CONTROLLER_IMAGE:-cdi-controller}"
IMPORTER_IMAGE="${IMPORTER_IMAGE:-cdi-importer}"
CLONER_IMAGE="${CLONER_IMAGE:-cdi-cloner}"
APISERVER_IMAGE="${APISERVER_IMAGE:-cdi-apiserver}"
UPLOADPROXY_IMAGE="${UPLOADPROXY_IMAGE:-cdi-uploadproxy}"
UPLOADSERVER_IMAGE="${UPLOADSERVER_IMAGE:-cdi-uploadserver}"

NETWORK_ADDONS_MULTUS_IMAGE="${NETWORK_ADDONS_MULTUS_IMAGE:-}"
NETWORK_ADDONS_LINUX_BRIDGE_CNI_IMAGE="${NETWORK_ADDONS_LINUX_BRIDGE_CNI_IMAGE:-}"
NETWORK_ADDONS_LINUX_BRIDGE_MARKER_IMAGE="${NETWORK_ADDONS_LINUX_BRIDGE_MARKER_IMAGE:-}"
NETWORK_ADDONS_KUBEMACPOOL_IMAGE="${NETWORK_ADDONS_KUBEMACPOOL_IMAGE:-}"
NETWORK_ADDONS_NMSTATE_HANDLER_IMAGE="${NETWORK_ADDONS_NMSTATE_HANDLER_IMAGE:-}"
NETWORK_ADDONS_OVS_CNI_PLUGIN_IMAGE="${NETWORK_ADDONS_OVS_CNI_PLUGIN_IMAGE:-}"
NETWORK_ADDONS_OVS_CNI_MARKER_IMAGE="${NETWORK_ADDONS_OVS_CNI_MARKER_IMAGE:-}"

VM_IMPORT_CONTAINER_REGISTRY="${VM_IMPORT_CONTAINER_REGISTRY:-quay.io/kubevirt}"
VM_IMPORT_IMAGE="${VM_IMPORT_IMAGE:-vm-import-operator}"


if echo "${CDI_CONTAINER_REGISTRY}" | grep 'brew'; then
    CONTROLLER_IMAGE="virt-${CONTROLLER_IMAGE}"
    IMPORTER_IMAGE="virt-$IMPORTER_IMAGE"
    CLONER_IMAGE="virt-$CLONER_IMAGE"
    APISERVER_IMAGE="virt-$APISERVER_IMAGE"
    UPLOADPROXY_IMAGE="virt-$UPLOADPROXY_IMAGE"
    UPLOADSERVER_IMAGE="virt-$UPLOADSERVER_IMAGE"
fi

function kubevirt_sed {
    sed -i "s|          image: \&image docker\.io\/kubevirt\/virt-operator:${KUBEVIRT_VERSION}|          image: \&image ${KUBEVIRT_CONTAINER_REGISTRY}\/virt-operator:${KUBEVIRT_VERSION}|g" ${TEMP_DIR}/kubevirt-operator.yaml
}

function cdi_sed {
    sed -i "s|          image: kubevirt\/cdi-operator:${CDI_VERSION}|          image: ${CDI_CONTAINER_REGISTRY}\/${CDI_OPERATOR_NAME}:${CDI_VERSION}|g" ${TEMP_DIR}/cdi-operator.yaml.j2

    ls "${TEMP_DIR}"/cdi-operator.yaml.j2

    python "${REPO_ROOT}"/hack/jinja2/cdi-j2.py "${TEMP_DIR}"/cdi-operator.yaml.j2 "${CDI_DOCKER_PREFIX}" "${CDI_OPERATOR_NAME}" "${CDI_VERSION}" "${CONTROLLER_IMAGE}" "${IMPORTER_IMAGE}" "${CLONER_IMAGE}" "${APISERVER_IMAGE}" "${UPLOADPROXY_IMAGE}" "${UPLOADSERVER_IMAGE}"

    rm "${TEMP_DIR}"/cdi-operator.yaml.j2
}

function network_addons_sed {
    sed -i "s|quay\.io\/kubevirt\/cluster-network-addons-operator:${NETWORK_ADDONS_VERSION}|${NETWORK_ADDONS_CONTAINER_REGISTRY}\/cluster-network-addons-operator:${NETWORK_ADDONS_VERSION}|g" ${TEMP_DIR}/operator.yaml

    if [ -n "${NETWORK_ADDONS_MULTUS_IMAGE}" ]; then
        sed -i "s|value: .*multus.*|value: ${NETWORK_ADDONS_MULTUS_IMAGE}|g" ${TEMP_DIR}/operator.yaml
    fi
    if [ -n "${NETWORK_ADDONS_LINUX_BRIDGE_CNI_IMAGE}" ]; then
        sed -i "s|value: .*cni-default-plugins.*|value: ${NETWORK_ADDONS_LINUX_BRIDGE_CNI_IMAGE}|g" ${TEMP_DIR}/operator.yaml
    fi
    if [ -n "${NETWORK_ADDONS_LINUX_BRIDGE_MARKER_IMAGE}" ]; then
        sed -i "s|value: .*bridge-marker.*|value: ${NETWORK_ADDONS_LINUX_BRIDGE_MARKER_IMAGE}|g" ${TEMP_DIR}/operator.yaml
    fi
    if [ -n "${NETWORK_ADDONS_KUBEMACPOOL_IMAGE}" ]; then
        sed -i "s|value: .*mac-controller.*|value: ${NETWORK_ADDONS_KUBEMACPOOL_IMAGE}|g" ${TEMP_DIR}/operator.yaml
    fi
    if [ -n "${NETWORK_ADDONS_NMSTATE_HANDLER_IMAGE}" ]; then
        sed -i "s|value: .*kubernetes-nmstate-handler.*|value: ${NETWORK_ADDONS_NMSTATE_HANDLER_IMAGE}|g" ${TEMP_DIR}/operator.yaml
    fi
    if [ -n "${NETWORK_ADDONS_OVS_CNI_PLUGIN_IMAGE}" ]; then
        sed -i "s|value: .*ovs-cni-plugin.*|value: ${NETWORK_ADDONS_OVS_CNI_PLUGIN_IMAGE}|g" ${TEMP_DIR}/operator.yaml
    fi
    if [ -n "${NETWORK_ADDONS_OVS_CNI_MARKER_IMAGE}" ]; then
        sed -i "s|value: .*ovs-cni-marker.*|value: ${NETWORK_ADDONS_OVS_CNI_MARKER_IMAGE}|g" ${TEMP_DIR}/operator.yaml
    fi
}

function ssp_sed {
    sed -i "s|          image: \&image quay\.io\/fromani\/kubevirt-ssp-operator-container:${SSP_VERSION}|          image: \&image ${SSP_CONTAINER_REGISTRY}\/kubevirt-ssp-operator-container:${SSP_VERSION}|g" ${TEMP_DIR}/operator.yaml
}

function vm_import_sed {
    sed -i "s|          image: \&image quay\.io\/kubevirt\/kubevirt-vm-import-operator-container:${VM_IMPORT_VERSION}|          image: \&image ${VM_IMPORT_CONTAINER_REGISTRY}\/kubevirt-vm-import-operator-container:${VM_IMPORT_VERSION}|g" ${TEMP_DIR}/operator.yaml
}

# Deploy upstream operators
OPERATOR_MANIFESTS="https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml
https://github.com/kubevirt/containerized-data-importer/releases/download/${CDI_VERSION}/cdi-operator.yaml.j2
https://github.com/kubevirt/cluster-network-addons-operator/releases/download/${NETWORK_ADDONS_VERSION}/network-addons-config.crd.yaml
https://github.com/kubevirt/cluster-network-addons-operator/releases/download/${NETWORK_ADDONS_VERSION}/namespace.yaml
https://github.com/kubevirt/cluster-network-addons-operator/releases/download/${NETWORK_ADDONS_VERSION}/operator.yaml
https://github.com/MarSik/kubevirt-ssp-operator/releases/download/${SSP_VERSION}/kubevirt-ssp-operator-crd.yaml
https://github.com/MarSik/kubevirt-ssp-operator/releases/download/${SSP_VERSION}/kubevirt-ssp-operator.yaml
https://github.com/kubevirt/vm-import-operator/releases/download/${VM_IMPORT_VERSION}/operator.yaml"

OPERATOR_CRS="https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml
https://github.com/kubevirt/containerized-data-importer/releases/download/${CDI_VERSION}/cdi-operator-cr.yaml
https://github.com/kubevirt/cluster-network-addons-operator/releases/download/${NETWORK_ADDONS_VERSION}/network-addons-config-example.cr.yaml
https://github.com/MarSik/kubevirt-ssp-operator/releases/download/${SSP_VERSION}/kubevirt-ssp-operator-cr.yaml
https://github.com/kubevirt/vm-import-operator/releases/download/${VM_IMPORT_VERSION}/vmimportconfig_cr.yaml"
