#!/bin/bash
### initial folders
function ewriteln() {
	echo ${1} | tee -a $MY_PROJFOLDER/env.sh
}

exec 2> >(while read line; do echo -e "\033[0;31m$line\033[0m" >&2; done)
export MY_PROJFOLDER=/artifacts
echo "# Using folder '$MY_PROJFOLDER'"
cd $MY_PROJFOLDER
[ ! -d envs ] && mkdir envs
[ ! -d envs/checkers ] && mkdir envs/checkers
[ ! -d envs/kubeconfigs ] && mkdir envs/kubeconfigs
[ ! -d yamls ] && mkdir yamls
[ ! -d reports ] && mkdir reports
[ ! -d tmp ] && mkdir tmp

# move mgmt (k0rdent mothership) k8s konfig to default place
if [ -f $MY_PROJFOLDER/mgmt-kubeconfig.yaml ]; then
    mv $MY_PROJFOLDER/mgmt-kubeconfig.yaml $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml
fi
if [ -f $MY_PROJFOLDER/node.key ]; then
    mv $MY_PROJFOLDER/node.key $MY_PROJFOLDER/envs/node.key
fi
if [ ! -f $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml ]; then
	echo "ERROR: k0rdent mgmt cluster (mothership) kubeconfig was not found either at '$MY_PROJFOLDER/mgmt-kubeconfig.yaml' or '$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml'"
	exit 1
fi
echo " "

### prepare needed variables
echo "# Updating '$MY_PROJFOLDER/env.sh'"

export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml
if [ ! -f $MY_PROJFOLDER/env.sh ]; then
	touch $MY_PROJFOLDER/env.sh
else
	truncate -s 0 $MY_PROJFOLDER/env.sh
	echo "$MY_PROJFOLDER/env.sh has been truncated"
fi

### Edit the following lines to set the client name, floating network name, IAM writer password
ewriteln "export MY_CLIENTNAME='ClientName'"
ewriteln "export MY_CLIENTSHORTNAME='clname'"
ewriteln "export MY_PROJNAME='K0RDENT_DEPLOY'"

### Setting the project directory
ewriteln "export MY_PROJFOLDER=/artifacts"

printf "\n\n# Getting ready ClusterDeployments"
printf "\n# For each ready cld, getting namespace and cluster"
kubectl get cld -A --no-headers | awk '$3 == "True" {print $1, $2}' | while read -r namespace name; do
    echo "   -> Processing $name in namespace $namespace..."
    kubeconfig_secret="${name}-kubeconfig"
    kubeconfig_file="$MY_PROJFOLDER/envs/kubeconfigs/${name}-kubeconfig.yaml"

    echo "   -> Fetching kubeconfig to $kubeconfig_file"
    kubectl -n "$namespace" get secret "$kubeconfig_secret" \
      -o jsonpath='{.data.value}' | base64 -d > "$kubeconfig_file"

    rc_file="$MY_PROJFOLDER/envs/${name}rc"
    echo "   -> Generating RC file at $rc_file"
    cat <<EOF > "$rc_file"
#!/bin/bash
export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/${name}-kubeconfig.yaml
export CHILD_CLUSTER_NAME=${name}
export CHILD_CLUSTER_NS=${namespace}
EOF

    chmod +x "$rc_file"
done

printf "\n\n# Writing additional options\n"
ewriteln "export SI_BINARIES_DIR=$(which helm | rev | cut -d'/' -f2- | rev)"
ewriteln "export HELM_BINARY_PATH=$(which helm)"


# generate additional files
printf "\n\n# Preparing additional files\n"
# copy files
cp -v /opt/res-files/k8s/workspace/* $MY_PROJFOLDER/envs/
[ ! -d $MY_PROJFOLDER/scripts ] && mkdir $MY_PROJFOLDER/scripts
mv -v $MY_PROJFOLDER/envs/*.sh $MY_PROJFOLDER/scripts/
mv -v $MY_PROJFOLDER/envs/*.env $MY_PROJFOLDER/envs/checkers

cp -v /opt/res-files/k8s/yamls/qa-rally.yaml $MY_PROJFOLDER/yamls
cp -v /opt/res-files/k8s/yamls/qa-res.yaml $MY_PROJFOLDER/yamls
cp -v /opt/res-files/k8s/yamls/qa-toolset-bare.yaml $MY_PROJFOLDER/yamls
cp -v /opt/res-files/k8s/yamls/qa-toolset.yaml $MY_PROJFOLDER/yamls

# remove duplicate init
rm -v $MY_PROJFOLDER/scripts/init-workspace.sh
# update IP Addresses
mgmt_ip=$(cat $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3)
echo "   -> MGMT (Mothership) Server IP is: ${mgmt_ip}"
sed -i "s/ip_address/$mgmt_ip/g" $MY_PROJFOLDER/envs/checkers/mgmt-checker.env


printf "\n\n# Preparing checker.env files for each child cluster, getting default SC...\n"
ENV_DIR="$MY_PROJFOLDER/envs"
CHECKERS_DIR="$MY_PROJFOLDER/envs/checkers"
for kubeconfig_path in "$ENV_DIR"/kubeconfigs/*-kubeconfig.yaml; do
    [[ -e "$kubeconfig_path" ]] || continue
    name=$(basename "$kubeconfig_path" -kubeconfig.yaml)

    echo "# Processing cluster - getting K8S IP: $name"
    child_ip=$(grep server "$kubeconfig_path" | cut -d':' -f3 | cut -d'/' -f3)
    echo "   -> Cluster ${name} Server IP is: ${child_ip}"

    checker_env="$CHECKERS_DIR/${name}-checker.env"
    cp $CHECKERS_DIR/child-checker.env ${checker_env}
    echo "   -> Generating checker.env for $name"
    sed -i "s/ip_address/${child_ip}/g" "$checker_env"

    default_sc=$(kubectl --kubeconfig "$kubeconfig_path" get sc 2>/dev/null | grep 'default' || true)

    if [[ -n "$default_sc" ]]; then
        vSC=$(echo "$default_sc" | awk '{print $1}')
        echo "   -> Default storage class: $vSC"
    else
        vSC=""
        echo "   -> No default storage class found."
    fi

    rc_file="$ENV_DIR/${name}rc"

    if [[ -f "$rc_file" ]]; then
        echo "   -> Updating RC file: $rc_file"
        echo "export CHILD_SC=${vSC}" >> "$rc_file"
    else
        echo "# RC file not found for $name — skipping."
    fi

done

# Aliases
ewriteln 'alias k=kubectl'

# end
echo " "
echo "# ✅ Done!"
