#!/usr/bin/env bash
# deploy-app.sh — simulasi pipeline deployment berbasis symlink release.
# Pemakaian: bash deploy-app.sh <versi>   → rilis versi baru
#            bash deploy-app.sh rollback → kembali ke versi sebelumnya
APP=app-toko
DIR=releases

deploy() {
    versi="$1"
    # 1. build: hasilkan artifact dari "kode sumber"
    printf '%s versi %s\n' "$APP" "$versi" > artifact.txt
    # 2. upload: taruh artifact di folder release baru
    mkdir -p "$DIR/$versi"
    cp artifact.txt "$DIR/$versi/app.txt"
    # 3. activate: alihkan symlink current ke rilis baru
    ln -sfn "$DIR/$versi" current
    # 4. verify: pastikan current melayankan versi yang benar
    if [ "$(cat current/app.txt)" = "$APP versi $versi" ]; then
        echo "deploy versi $versi: OK (current -> $DIR/$versi)"
    else
        echo "deploy versi $versi: GAGAL"
        exit 1
    fi
}

rollback() {
    sekarang=$(readlink current)
    versi_sekarang=${sekarang#"$DIR"/}
    sebelumnya=$(ls "$DIR" | sort -n | awk -v v="$versi_sekarang" \
        '($1+0) < (v+0) {akhir=$1} END {print akhir}')
    if [ -z "$sebelumnya" ]; then
        echo "rollback: tidak ada versi lebih lama"
        exit 1
    fi
    ln -sfn "$DIR/$sebelumnya" current
    echo "rollback: current -> $DIR/$sebelumnya"
}

if [ "${1:-}" = "rollback" ]; then
    rollback
elif [ -z "${1:-}" ]; then
    echo "pemakaian: bash deploy-app.sh <versi>|rollback" >&2
    exit 0
else
    deploy "$1"
fi
