#!/bin/bash

echo "You should probably start praying now!!"

DB_NAME="mk1"
DB_USER="misskey"

PATH_DOMAIN="data/"
OLD_DOMAIN="https://misskey.s3.ap-northeast-3.amazonaws.com/data"
REGEX_DOMAIN="https://misskey\.s3\.ap-northeast-3\.amazonaws\.com/data"
NEW_DOMAIN="https://abyss.cafe/files/aws"
BACKUP_DIR="/home/misskey/backup"
OUTPUT_DIR="/home/misskey/misskey/files/aws"

mkdir ${BACKUP_DIR}
mkdir ${OUTPUT_DIR}

timestamp=$(date +%Y%m%d-%H%M%S)
backup_file="${BACKUP_DIR}/backup-public-${timestamp}.sql"
mkdir -p "${BACKUP_DIR}"
pg_dump -U "${DB_USER}" -n public -Fc "${DB_NAME}" > "${backup_file}"

echo "Downloading ${DB_NAME}.public.drive_file.url..."
psql -U "${DB_USER}" -d "${DB_NAME}" -t -c "SELECT url FROM public.drive_file WHERE url LIKE '%${OLD_DOMAIN}%';" | while read -r url; do
    if [ -n "$url" ]; then
        filename=$(basename "$url")
        wget -q "$url" -O "$OUTPUT_DIR/$filename"
    fi
done
echo "Updating  ${DB_NAME}.public.drive_file.url..."
psql -U "${DB_USER}" -d "${DB_NAME}" -t -c "UPDATE public.drive_file SET url = regexp_replace(url, '${REGEX_DOMAIN}', '${NEW_DOMAIN}', 'g') WHERE url LIKE '%${OLD_DOMAIN}%';"

echo "Downloading ${DB_NAME}.public.drive_file.thumbnailUrl..."
psql -U "${DB_USER}" -d "${DB_NAME}" -t -c "SELECT \"thumbnailUrl\" FROM public.drive_file WHERE \"thumbnailUrl\" LIKE '%${OLD_DOMAIN}%';" | while read -r thumbnailUrl; do
    if [ -n "$thumbnailUrl" ]; then
        filename=$(basename "$thumbnailUrl")
        echo "Downloading $thumbnailUrl to $OUTPUT_DIR/$filename"
        wget -q "$thumbnailUrl" -O "$OUTPUT_DIR/$filename"
    fi
done
echo "Updating  ${DB_NAME}.public.drive_file.thumbnailUrl..."
psql -U "${DB_USER}" -d "${DB_NAME}" -t -c "UPDATE public.drive_file SET \"thumbnailUrl\" = regexp_replace(\"thumbnailUrl\", '${REGEX_DOMAIN}', '${NEW_DOMAIN}', 'g') WHERE \"thumbnailUrl\" LIKE '%${OLD_DOMAIN}%';"

echo "Downloading ${DB_NAME}.public.drive_file.webpublicUrl..."
psql -U "${DB_USER}" -d "${DB_NAME}" -t -c "SELECT \"webpublicUrl\" FROM public.drive_file WHERE \"webpublicUrl\" LIKE '%${OLD_DOMAIN}%';" | while read -r webpublicUrl; do
    if [ -n "$webpublicUrl" ]; then
        filename=$(basename "$webpublicUrl")
        echo "Downloading $webpublicUrl to $OUTPUT_DIR/$filename"
        wget -q "$webpublicUrl" -O "$OUTPUT_DIR/$filename"
    fi
done
echo "Updating  ${DB_NAME}.public.drive_file.webpublicUrl..."
psql -U "${DB_USER}" -d "${DB_NAME}" -t -c "UPDATE public.drive_file SET \"webpublicUrl\" = regexp_replace(\"webpublicUrl\", '${REGEX_DOMAIN}', '${NEW_DOMAIN}', 'g') WHERE \"webpublicUrl\" LIKE '%${OLD_DOMAIN}%';"

echo "Updating keys..."
psql -U "${DB_USER}" -d "${DB_NAME}" -t -c "UPDATE public.drive_file SET \"accessKey\" = regexp_replace(\"accessKey\", '^${PATH_DOMAIN}', '') WHERE \"accessKey\" LIKE '${PATH_DOMAIN}%';"
psql -U "${DB_USER}" -d "${DB_NAME}" -t -c "UPDATE public.drive_file SET \"thumbnailAccessKey\" = regexp_replace(\"thumbnailAccessKey\", '^${PATH_DOMAIN}', '') WHERE \"thumbnailAccessKey\" LIKE '${PATH_DOMAIN}%';"
psql -U "${DB_USER}" -d "${DB_NAME}" -t -c "UPDATE public.drive_file SET \"webpublicAccessKey\" = regexp_replace(\"webpublicAccessKey\", '^${PATH_DOMAIN}', '') WHERE \"webpublicAccessKey\" LIKE '${PATH_DOMAIN}%';"

echo "Script finished, finish praying and prepare to restore a backup!!"