#!/usr/bin/env bash

# Hack to adjust the generated postgresql CRD YAML file and add missing field
# settings which can not be expressed via kubebuilder markers.
#
# Injections:
#
#  * oneOf: for the standby field to enforce validation rules:
#    - s3_wal_path and gs_wal_path are mutually exclusive
#    - standby_host can be specified alone or with either s3_wal_path OR gs_wal_path
#    - at least one of s3_wal_path, gs_wal_path, or standby_host must be set
#  * type: string and pattern for the maintenanceWindows items.

file="${1:-"manifests/postgresql.crd.yaml"}"

SED=$(command -v gsed 2>/dev/null || command -v sed)

$SED -i '/^[[:space:]]*standby:$/{
    # Capture the indentation
    s/^\([[:space:]]*\)standby:$/\1standby:\n\1  anyOf:\n\1  - required:\n\1    - s3_wal_path\n\1  - required:\n\1    - gs_wal_path\n\1  - required:\n\1    - standby_host\n\1  not:\n\1    required:\n\1    - s3_wal_path\n\1    - gs_wal_path/
}' "$file"

$SED -i '/^[[:space:]]*maintenanceWindows:$/{
    # Capture the indentation
    s/^\([[:space:]]*\)maintenanceWindows:$/\1maintenanceWindows:\n\1  items:\n\1    pattern: '\''^\\ *((Mon|Tue|Wed|Thu|Fri|Sat|Sun):(2[0-3]|[01]?\\d):([0-5]?\\d)|(2[0-3]|[01]?\\d):([0-5]?\\d))-((2[0-3]|[01]?\\d):([0-5]?\\d)|(2[0-3]|[01]?\\d):([0-5]?\\d))\\ *$'\''\n\1    type: string/
}' "$file"
