#!/bin/bash

indent() {
  INDENT="      "
  sed "s/^/$INDENT/" | sed "s/^${INDENT}\($1\)/${INDENT:0:-2}- \1/"
}

deploy_marketplace_operator(){
  local ns=$1
  local name=$2
  local package=${3:-$name}
  cat <<EOL | oc create -f -
apiVersion: v1
kind: List
items:
- apiVersion: v1
  kind: Namespace
  metadata:
    name: $ns
- apiVersion: operators.coreos.com/v1
  kind: OperatorGroup
  metadata:
    name: $ns
    namespace: $ns
  spec:
    targetNamespaces: 
    - $ns
    packages: "$name"    
- apiVersion: operators.coreos.com/v1alpha1
  kind: Subscription
  metadata:
    name: $name
    namespace: $ns
  spec:
    channel: preview
    installPlanApproval: Automatic
    name: $package
    source: redhat-operators
    sourceNamespace: openshift-marketplace
EOL

}

deploy_config_map_catalog_source() {
  local namespace=$1
  local manifest_dir=$2
  local image=${3:-}

  local version=$(basename $(find $manifest_dir -type d | sort -r | head -n 1))

  local CRD=$(sed '/^#!.*$/d' $manifest_dir/$version/*crd.yaml | grep -v -- "---" | indent apiVersion)
  local PKG=$(sed '/^#!.*$/d' $manifest_dir/*package.yaml | indent packageName)
  local CSV=$(sed '/^#!.*$/d' $manifest_dir/$version/*version.yaml | sed 's/namespace: placeholder/namespace: '$namespace'/' |grep -v -- "---" |  indent apiVersion)
  local PACKAGE_NAME=$(sed -nr 's,.*packageName: (.*),\1,p' $manifest_dir/*package.yaml)
  if [ -n "${image:-}" ] ; then
    CSV=$(echo "$CSV" | sed -e "s~containerImage:.*+~containerImage: ${image}~" | indent apiVersion)
    CSV=$(echo "$CSV" | sed -e "s~image:.*~image: ${image}\n~" | indent ApiVersion)
  fi

  cat <<EOF | sed 's/^  *$//' | oc create -n $namespace -f -
kind: ConfigMap
apiVersion: v1
metadata:
  name: $PACKAGE_NAME
data:
  customResourceDefinitions: |-
$CRD
  clusterServiceVersions: |-
$CSV
  packages: |-
$PKG
EOF
  cat <<EOF | oc create -n $namespace -f -
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
  name: $PACKAGE_NAME
spec:
  sourceType: internal
  configMap: $PACKAGE_NAME
  displayName: $PACKAGE_NAME
  publisher: Operator Framework
EOF

}