#!/bin/bash

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

# Use upstream manifests with downstream containers
KUBEVIRT_MANIFEST_VERSION="v0.17.0"
CDI_MANIFEST_VERSION="v1.6.0"
NETWORK_ADDONS_MANIFEST_VERSION="0.7.0"
SSP_MANIFEST_VERSION="v1.0.0"
KWEBUI_MANIFEST_VERSION="v0.1.10"

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}"
KWEBUI_CONTAINER_REGISTRY="${KWEBUI_CONTAINER_REGISTRY:-quay.io/kubevirt}"

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_SRIOV_DP_IMAGE="${NETWORK_ADDONS_SRIOV_DP_IMAGE}"
NETWORK_ADDONS_SRIOV_CNI_IMAGE="${NETWORK_ADDONS_SRIOV_CNI_IMAGE}"
NETWORK_ADDONS_KUBEMACPOOL_IMAGE="${NETWORK_ADDONS_KUBEMACPOOL_IMAGE}"
NETWORK_ADDONS_SRIOV_NETWORK_TYPE="${NETWORK_ADDONS_SRIOV_NETWORK_TYPE:-sriov}"

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_MANIFEST_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_MANIFEST_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_MANIFEST_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_SRIOV_DP_IMAGE}" ]; then
        sed -i "s|value: .*sriov-device-plugin.*|value: ${NETWORK_ADDONS_SRIOV_DP_IMAGE}|g" ${TEMP_DIR}/operator.yaml
    fi
    if [ -n "${NETWORK_ADDONS_SRIOV_CNI_IMAGE}" ]; then
        sed -i "s|value: .*sriov-cni.*|value: ${NETWORK_ADDONS_SRIOV_CNI_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

    sed -i "s|value: sriov$|value: ${NETWORK_ADDONS_SRIOV_NETWORK_TYPE}|g" ${TEMP_DIR}/operator.yaml
}

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

function kwebui_sed {
    sed -i "s|  image: quay\.io\/kubevirt\/kubevirt-web-ui-operator:.*$|  image: ${KWEBUI_CONTAINER_REGISTRY}\/kubevirt-web-ui-operator:${KWEBUI_MANIFEST_VERSION}|g" ${TEMP_DIR}/operator.yaml
}

# Deploy upstream operators
OPERATOR_MANIFESTS="https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_MANIFEST_VERSION}/kubevirt-operator.yaml
https://github.com/kubevirt/containerized-data-importer/releases/download/${CDI_MANIFEST_VERSION}/cdi-operator.yaml.j2
https://github.com/kubevirt/cluster-network-addons-operator/releases/download/${NETWORK_ADDONS_MANIFEST_VERSION}/network-addons-config.crd.yaml
https://github.com/kubevirt/cluster-network-addons-operator/releases/download/${NETWORK_ADDONS_MANIFEST_VERSION}/namespace.yaml
https://github.com/kubevirt/cluster-network-addons-operator/releases/download/${NETWORK_ADDONS_MANIFEST_VERSION}/operator.yaml
https://raw.githubusercontent.com/MarSik/kubevirt-ssp-operator/${SSP_MANIFEST_VERSION}/cluster/${SSP_MANIFEST_VERSION:1}/kubevirt-ssp-operator-crd.yaml
https://raw.githubusercontent.com/MarSik/kubevirt-ssp-operator/${SSP_MANIFEST_VERSION}/cluster/${SSP_MANIFEST_VERSION:1}/kubevirt-ssp-operator.yaml
https://raw.githubusercontent.com/kubevirt/web-ui-operator/${KWEBUI_MANIFEST_VERSION}/deploy/operator.yaml"

OPERATOR_CRS="https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_MANIFEST_VERSION}/kubevirt-cr.yaml
https://github.com/kubevirt/containerized-data-importer/releases/download/${CDI_MANIFEST_VERSION}/cdi-operator-cr.yaml
https://github.com/kubevirt/cluster-network-addons-operator/releases/download/${NETWORK_ADDONS_MANIFEST_VERSION}/network-addons-config-example.cr.yaml
https://raw.githubusercontent.com/MarSik/kubevirt-ssp-operator/${SSP_MANIFEST_VERSION}/cluster/${SSP_MANIFEST_VERSION:1}/kubevirt-ssp-operator-cr.yaml
https://github.com/kubevirt/web-ui-operator/blob/${KWEBUI_MANIFEST_VERSION}/deploy/crds/kubevirt_v1alpha1_kwebui_cr.yaml"
