#!/bin/bash
# Script to fix Forgejo deployment by switching to standard PostgreSQL

set -e

NAMESPACE="container-mom-git"
FORGEJO_PV="pv-forgejo-shared-storage"

echo "=== Fixing Forgejo Deployment - Switching to Standard PostgreSQL ==="

# Step 1: Ensure the gitea-shared-storage PVC exists
echo "Creating gitea-shared-storage PVC..."
cat << EOF | oc apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: gitea-shared-storage
  namespace: ${NAMESPACE}
  labels:
    app.kubernetes.io/managed-by: "Helm"
    app.kubernetes.io/instance: "forgejo"
    app.kubernetes.io/name: forgejo
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: forgejo-local-storage
  volumeName: ${FORGEJO_PV}
EOF

# Step 2: Create PostgreSQL standard PV
echo "Creating PostgreSQL standard PV..."
cat << EOF | oc apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-postgresql-data
spec:
  capacity:
    storage: 8Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: forgejo-local-storage
  local:
    path: /var/tmp/forgejo-postgresql-ha-0
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - master-0
EOF

# Step 3: Uninstall the current Forgejo deployment
echo "Uninstalling current Forgejo deployment..."
helm uninstall forgejo -n ${NAMESPACE} || true

# Step 4: Remove PostgreSQL HA resources
echo "Removing PostgreSQL HA resources..."
oc delete statefulset --selector app.kubernetes.io/name=postgresql-ha -n ${NAMESPACE} --grace-period=0 --force || true
oc delete deployment --selector app.kubernetes.io/name=postgresql-ha -n ${NAMESPACE} --grace-period=0 --force || true
oc delete configmap --selector app.kubernetes.io/name=postgresql-ha -n ${NAMESPACE} || true
oc delete secret --selector app.kubernetes.io/name=postgresql-ha -n ${NAMESPACE} || true
oc delete pvc --selector app.kubernetes.io/name=postgresql-ha -n ${NAMESPACE} || true

# Step 5: Wait for deletion to complete
echo "Waiting for deletion to complete..."
sleep 10

# Step 6: Install Forgejo with standard PostgreSQL
echo "Installing Forgejo with standard PostgreSQL..."
helm install forgejo oci://code.forgejo.org/forgejo-helm/forgejo -n ${NAMESPACE} \
  --set gitea.admin.username=gitea_admin \
  --set gitea.admin.password=gitea_admin \
  --set gitea.admin.email=gitea@example.com \
  --set postgresql.enabled=true \
  --set postgresql-ha.enabled=false \
  --set postgresql.global.postgresql.auth.password=gitea \
  --set postgresql.global.postgresql.auth.database=forgejo \
  --set postgresql.global.postgresql.auth.username=forgejo \
  --set persistence.existingClaim=gitea-shared-storage

# Step 7: Wait for pods to start
echo "Waiting for pods to start..."
sleep 20

# Step 8: Display current status
echo "Current pod status:"
oc get pods -n ${NAMESPACE}

echo ""
echo "Fix completed. Please check the pod status in a few minutes."
echo "If pods are not ready, you may need to check the logs with: oc logs -f <pod-name> -n ${NAMESPACE}" 