#!/usr/bin/env bash
# Copyright 2019 Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

source "$SOWLIB/k8s"

check_shoot_status(){
  if shoot=$(kubectl -n "$1" get shoot "$2" -o json); then
    if [[ $(jq -r '.status.observedGeneration' <<< "$shoot") != $(jq -r '.metadata.generation' <<< "$shoot") ]]; then
      return 1
    fi
    for i in $(seq 0 3); do
      if [[ $(jq -r ".status.conditions[$i].status" <<< "$shoot") != "True" ]]; then
        return 1
      fi
    done
    return 0
  fi
  return 1
}

shootready()
{
  if [ "$1" = "deploy" ]; then
    PLUGIN_setup "$2" shootready
    K8S_setKubeConfig "$field_path" "$GENDIR/$field_path/kubeconfig"
    getRequiredValue name "name" PLUGINCONFIGJSON
    getRequiredValue namespace "namespace" PLUGINCONFIGJSON
    timeout=3600
    step=60
    start=$(date +%s)
    end=$(($start + $timeout))
    debug "Waiting for shoot '$name' in namespace '$namespace' to become ready. Checking every $step seconds for a maximum of $timeout seconds."
    while ! check_shoot_status "$namespace" "$name"; do
      if [[ $(date +%s) -gt $end ]]; then
        fail "shoot '$name' in namespace '$namespace' didn't become ready within $timeout seconds"
      fi
      info "Waiting for shoot '$name' to become ready ..."
      sleep $step
    done
    info "Shoot '$name' is ready."
  fi
}
