#!/bin/bash -ex

echo "render_templates START..."

rm -rf src
cp -r ocs-operator-upstream src

# override some code from github by modified scripts from midstream
cp -r cpaas-ocs-bundle-scripts/* src

source include/ocs.sh
export OCS_VERSION=$(echo $CPAAS_PRODUCT_VERSION | cut -d'.' -f -2)

# Install oc, from include/ocs.sh
get_oc_tool

pushd src

#tag_to_sha CEPH_IMAGE "${SIDECAR_MAP[rhceph]}" "${CEPH_TAGS[$OCS_VERSION]}"
export CEPH_IMAGE="registry.redhat.io/rhceph/rhceph-4-rhel8@sha256:a5515fcdf2fc7fa791b8364263922051fa3ea77c54a1e28ef342cd4e53ae22cc"

ROOK_IMAGE=$(echo ${ROOK_CEPH_OPERATOR_BUILD_INFO_JSON} | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["extra"]["image"]["index"]["pull"][0])')
ROOK_IMAGE=$(map_pull_spec $ROOK_IMAGE)
export ROOK_IMAGE
NOOBAA_IMAGE=$(echo ${NOOBAA_OPERATOR_BUILD_INFO_JSON} | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["extra"]["image"]["index"]["pull"][0])')
NOOBAA_IMAGE=$(map_pull_spec $NOOBAA_IMAGE)
export NOOBAA_IMAGE

if  [ ${OCS_VERSION//./} -ge 48 ]
then
    VOLUME_REPLICATION_OPERATOR_IMAGE=$(echo ${VOLUME_REPLICATION_OPERATOR_BUILD_INFO_JSON} | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["extra"]["image"]["index"]["pull"][0])')
    VOLUME_REPLICATION_OPERATOR_IMAGE=$(map_pull_spec $VOLUME_REPLICATION_OPERATOR_IMAGE)
    export VOLUME_REPLICATION_OPERATOR_IMAGE
else
    VOLUME_REPLICATION_OPERATOR_IMAGE="N/A"
fi

## Set container version and release
# Version copies supplied CSV version
VERSION="${CPAAS_PRODUCT_VERSION}"
BUILD_NUMBER=$(echo ${NOOBAA_CORE_BUILD_INFO_JSON} | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["extra"]["image"]["index"]["tags"][0].split("-")[1])')
# Release follows CSV versioning (see later)
RELEASE="${BUILD_NUMBER}.ci"

# Overwrite CSV version for CSV generation
export CSV_VERSION="${CPAAS_PRODUCT_VERSION}"
OCS_IMAGE=$(echo ${OCS_OPERATOR_BUILD_INFO_JSON} | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["extra"]["image"]["index"]["pull"][0])')
OCS_IMAGE=$(map_pull_spec $OCS_IMAGE)
export OCS_IMAGE
OCS_MUST_GATHER_IMAGE=$(echo ${OCS_MUST_GATHER_BUILD_INFO_JSON} | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["extra"]["image"]["index"]["pull"][0])')
OCS_MUST_GATHER_IMAGE=$(map_pull_spec $OCS_MUST_GATHER_IMAGE)
export OCS_MUST_GATHER_IMAGE
ROOK_CSI_CEPH_IMAGE=$(echo ${CEPHCSI_BUILD_INFO_JSON} | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["extra"]["image"]["index"]["pull"][0])')
ROOK_CSI_CEPH_IMAGE=$(map_pull_spec $ROOK_CSI_CEPH_IMAGE)
export ROOK_CSI_CEPH_IMAGE

#tag_to_sha ROOK_CSI_REGISTRAR_IMAGE "${SIDECAR_MAP[csi-node-driver-registrar]}" "${ROOK_CSI_REGISTRAR_TAG[$OCS_VERSION]}"
export ROOK_CSI_REGISTRAR_IMAGE="registry.redhat.io/openshift4/ose-csi-node-driver-registrar@sha256:dab2f476e57b76dc7662aab2181f7967d7f754f98287e9ddd4760d0a40999fb5"
#tag_to_sha ROOK_CSI_RESIZER_IMAGE "${SIDECAR_MAP[csi-external-resizer]}" "${ROOK_CSI_RESIZER_TAG[$OCS_VERSION]}"
export ROOK_CSI_RESIZER_IMAGE="registry.redhat.io/openshift4/ose-csi-external-resizer@sha256:1bb20a55802a3f1a6cfe6b9f5135beea1e2b55ed9a9ce6ea61af3c9e2a30caa1"
#tag_to_sha ROOK_CSI_PROVISIONER_IMAGE "${SIDECAR_MAP[csi-external-provisioner]}" "${ROOK_CSI_PROVISIONER_TAG[$OCS_VERSION]}"
export ROOK_CSI_PROVISIONER_IMAGE="registry.redhat.io/openshift4/ose-csi-external-provisioner@sha256:a901dc775d518e7785f738ee306c650c9cc32470e487a9dcaab7302ed799f2e9"
#tag_to_sha ROOK_CSI_ATTACHER_IMAGE "${SIDECAR_MAP[csi-external-attacher]}" "${ROOK_CSI_ATTACHER_TAG[$OCS_VERSION]}"
export ROOK_CSI_ATTACHER_IMAGE="registry.redhat.io/openshift4/ose-csi-external-attacher@sha256:4854c1bd0ab62e0f149be5f76a6a409ff9eb2a30be6e82cf051a2dd732dabbf8"
#tag_to_sha ROOK_CSI_SNAPSHOTTER_IMAGE "${SIDECAR_MAP[csi-external-snapshotter]}" "${ROOK_CSI_SNAPSHOTTER_TAG[$OCS_VERSION]}"
export ROOK_CSI_SNAPSHOTTER_IMAGE="registry.redhat.io/openshift4/ose-csi-external-snapshotter@sha256:92115bc3f08d0fc6d791c4f392d25d8b818c44c5050d53555330a390b62bcfa1"

NOOBAA_CORE_IMAGE=$(echo ${NOOBAA_CORE_BUILD_INFO_JSON} | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["extra"]["image"]["index"]["pull"][0])')
NOOBAA_CORE_IMAGE=$(map_pull_spec $NOOBAA_CORE_IMAGE)
export NOOBAA_CORE_IMAGE

#tag_to_sha NOOBAA_DB_IMAGE "${SIDECAR_MAP[rhel8-postgresql-12]}" "${NOOBAA_DB_TAG[$OCS_VERSION]}"
export NOOBAA_DB_IMAGE="registry.redhat.io/rhel8/postgresql-12@sha256:1b91c9946f4351bd3688bc538d498e6738cd8a5285af998be6e8dfe218dca6fa"

# this range should allow any older version to be upgraded to this version
# see: https://github.com/operator-framework/operator-lifecycle-manager/blob/release-4.2/doc/design/how-to-update-operators.md#skiprange
export SKIP_RANGE=">=4.2.0 <${CSV_VERSION}"
# Set replaces to unmask older builds in OLM
CSV_Z_VERSION=$(echo "${CPAAS_PRODUCT_VERSION}" | cut -d '.' -f 3)
if test "$CSV_Z_VERSION" -gt 0; then
        export REPLACES_CSV_VERSION="$OCS_VERSION.$(($CSV_Z_VERSION - 1))"
fi

# Generate release CSV
make gen-release-csv

if [ ${OCS_VERSION//./} -le 44 ]; then
        echo -e "\nConverting to OPERATOR BUNDLE format\n"
        mkdir -p deploy/olm-catalog/ocs-operator/manifests
        cp -r deploy/olm-catalog/ocs-operator/$CSV_VERSION/* deploy/olm-catalog/ocs-operator/manifests/
        mv -f deploy/olm-catalog/ocs-operator/manifests/{ocs-operator.v$CSV_VERSION.clusterserviceversion.yaml,ocs-operator.clusterserviceversion.yaml}
else
        echo -e "\nThe manifests are already in OPERATOR BUNDLE format, nothing to modify.\n"
fi

popd

### Modify manifests ###
# Remove old manifests dir
rm -rf bundle
mkdir bundle

# Copy the new manifests and metadata to dist-git
if [ ${OCS_VERSION//./} -ge 47 ]; then
        # Add OCS operator to the related images field
        ./add_ocs_operator.py src/deploy/bundle/manifests/
        cp -a src/deploy/bundle/manifests/ ./bundle
        cp -a src/deploy/bundle/metadata/ ./bundle
else
	cp -a src/deploy/olm-catalog/ocs-operator/manifests/ ./bundle
        cp -a src/deploy/bundle/metadata/ ./bundle
fi

# Add the full_version label for QE to be able to identify the build
sed -i "/^  labels:\$/a\    full_version: $CPAAS_PRODUCT_VERSION-$RELEASE" bundle/manifests/ocs-operator.clusterserviceversion.yaml

### Update the annotations.yaml
if test "$CSV_Z_VERSION" -eq 0; then
        # Update the default channel
        sed -i -e "s|^.*operators.operatorframework.io.bundle.channel.default.v1:.*$|  operators.operatorframework.io.bundle.channel.default.v1: \"stable-${OCS_VERSION}\"|" bundle/metadata/annotations.yaml
else
        # Comment out the default channel
        sed -i -e "s|^.*operators.operatorframework.io.bundle.channel.default.v1:.*$|  #operators.operatorframework.io.bundle.channel.default.v1: \"stable-${OCS_VERSION}\"|" bundle/metadata/annotations.yaml
fi

sed -i -e "s|^.*operators.operatorframework.io.bundle.channels.v1:.*$|  operators.operatorframework.io.bundle.channels.v1: \"eus-${OCS_VERSION},stable-${OCS_VERSION}\"|" bundle/metadata/annotations.yaml
sed -i -e "s|^.*operators.operatorframework.io.bundle.package.v1:.*$|  operators.operatorframework.io.bundle.package.v1: ocs-operator|" bundle/metadata/annotations.yaml

rm -rf src
