#! /bin/bash

setup=""
commit=0
prune_stopped=0

while [ -n "$1" ]; do
  case "$1" in
    -c | --commit ) commit=1; shift ;;
    -s | --stopped ) prune_stopped=1; shift ;;
    -n | --setup ) setup="-n $2"; shift 2;;
    * ) echo "$0 [-n project] [--commit] [--stopped]"; break ;;
  esac
done


dcs="$(oc $setup get dc | grep -v NAME)"

while read -r dc; do
    name=$(echo "$dc" | awk '{ print $1 }')
    revision=$(echo "$dc" | awk '{ print $2 }')
    dc_desired=$(echo "$dc" | awk '{ print $3 }')
    dc_current=$(echo "$dc" | awk '{ print $4 }')
    
    rcname="$name-$revision"
    rc="$(oc $setup get rc $rcname | grep -v NAME)"
    desired=$(echo "$rc" | awk '{ print $2 }')
    current=$(echo "$rc" | awk '{ print $3 }')
    ready=$(echo "$rc" | awk '{ print $4 }')

    if [ $dc_desired -ne $dc_current ]; then
        [ $commit -eq 1 ] && echo "Skipping faulty dc/$name"
        continue
    elif [ $desired -ne $current -o $desired -ne $ready ]; then
        [ $commit -eq 1 ] && echo "Skipping not completely ready dc/$name"
        continue
    elif [ $desired -eq 0 -a $prune_stopped -ne 1 ]; then
        [ $commit -eq 1 ] && echo "Skipping stopped dc/$name (last one could be faulty)"
        continue
    fi


    rcs="$(oc $setup get rc -l openshift.io/deployment-config.name=$name | grep -v NAME)"
    
    while read -r oldrc; do
        oldname=$(echo "$oldrc" | awk '{ print $1 }')
        desired=$(echo "$oldrc" | awk '{ print $2 }')

        [ $oldname = $rcname ] && continue
        [ $desired -ne 0 ] && continue
        
        if [ $commit -eq 1 ]; then
            echo "Removing: $oldname (keeping $rcname[$ready])" 
            oc $setup delete rc "$oldname"
        else 
            echo "Will remove: $oldname (keeping $rcname[$ready])" 
        fi
    done <<< "$rcs"
    
done <<< "$dcs"
