#!/bin/bash
SCRIPT_DIR="/home/insuraz1/public_html/_bildr/backup"
JSON_OAUTH=$SCRIPT_DIR"/oauth.json"
JSON_TOKEN=$SCRIPT_DIR"/token.json"
CLIENT_ID=$(jq -r '.installed.client_id' "$JSON_OAUTH")
CLIENT_SECRET=$(jq -r '.installed.client_secret' "$JSON_OAUTH")
TOKEN_URL=$(jq -r '.installed.token_uri' "$JSON_OAUTH")
REFRESH_TOKEN=$(jq -r '.refresh_token' "$JSON_TOKEN")
ACCESS_TOKEN=""

SCOPE_URL="https://www.googleapis.com/auth/drive"
FILE_URL="https://www.googleapis.com/drive/v3/files"
UPLOAD_URL="https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart"
FOLDER_ID="1uEMpjAkMmzXFZ5ZNp4d7epd706RnejXt"
OWNER="bookbildr@gmail.com"

refresh_access_token() {
    new_token=$(curl -s -X POST "$TOKEN_URL" \
        -d client_id="$CLIENT_ID" \
        -d client_secret="$CLIENT_SECRET" \
        -d refresh_token="$REFRESH_TOKEN" \
        -d grant_type=refresh_token)

    ACCESS_TOKEN=$(echo "$new_token" | jq -r '.access_token')
}

get_account_info() {
    if [ ! -z "$ACCESS_TOKEN" ]; then
        curl -s -X GET \
            -H "Authorization: Bearer $ACCESS_TOKEN" \
            "https://www.googleapis.com/drive/v3/about?fields=user,storageQuota"
    fi
}

get_remote_dirs() {
    if [ ! -z "$ACCESS_TOKEN" ]; then
        curl -s -X GET \
            -H "Authorization: Bearer $ACCESS_TOKEN" \
            "$FILE_URL?q='$FOLDER_ID'+in+parents+and+mimeType='application/vnd.google-apps.folder'&fields=files(id,name)" \
            | jq -c '.files[]'
    fi
}

delete_file() {
    file_id="$1"
    if [ ! -z "$ACCESS_TOKEN" ]; then
        curl -X DELETE \
            -H "Authorization: Bearer $ACCESS_TOKEN" \
            -H "Content-Type: application/json" \
            "$FILE_URL/$file_id"
    fi
}

gdrive_roll_back() {
    BACKUP="$1"
    USER="$2"
    BK_PATH=$(echo $BACKUP | sed -n 's/.*public_html\/\([^\/]*\)\/.*/\1/p')
    BK_FILE=$(echo $BACKUP | sed 's/.*done_\([0-9]*\)\.txt/\1/')
    TARGET=$(cat "$BACKUP" | grep "$USER" | sed -E 's#_delete/.*#bildr#')
    #echo $TARGET

    rm -f $SCRIPT_DIR"/*.zip"
    if [ ! -z "$ACCESS_TOKEN" ]; then
        get_remote_dirs | while read -r dir; do
            local SUB_ID=$(echo "$dir" | jq -r '.id')
            FILE=$(curl -s -X GET \
                -H "Authorization: Bearer $ACCESS_TOKEN" \
                "$FILE_URL?q='$SUB_ID'+in+parents+and+name+contains+'$BK_FILE'&fields=files(id,name)" \
                | jq -c '.files[]')
            
            FILE_ID=$(echo "$FILE" | jq -r '.id')
            FILE_NAME=$(echo "$FILE" | jq -r '.name')
            if [ ! -z "$FILE_ID" ]; then
                echo "Found file: $FILE_NAME"
                echo "File ID: $FILE_ID"
                echo "Downloading file..."

                # Download the file
                curl -s -L \
                    -H "Authorization: Bearer $ACCESS_TOKEN" \
                    "$FILE_URL/$FILE_ID?alt=media" \
                    -o "$FILE_NAME"

                TMP=$SCRIPT_DIR"/tmp"
                echo "Extracting backup to "$TMP
                mkdir -p $TMP
                unzip -q "$FILE_NAME" "*/$USER/*" -d $TMP

                # Find the user directory
                USER_DIR=$(find "$TMP" -type d -name "$USER" -print -quit)

                if [ -n "$USER_DIR" ]; then
                    echo "Merging contents of $USER_DIR into $TARGET"
                    mkdir -p "$TARGET"              # <-- Ensures TARGET exists
                    cp -a "$USER_DIR/" "$TARGET/"   # Or use: cp -a "$USER_DIR/." "$TARGET/"
                else
                    echo "Directory '$USER' not found in extracted content."
                    exit 1
                fi

                rm -rf "$TMP"
                rm -f "$FILE_NAME"
            fi
        done
    fi
}
