#!/bin/bash

# ==========================================================
# MySQL 데이터베이스 복원 스크립트
# 작성일: 2026-02-14
# 설명: 백업된 .sql.gz 파일을 대상으로 복원 수행
# ==========================================================

# [설정] 타겟 서버 접속 정보
DST_USER="root"
DST_PW="@smartserver"

# [기본값 설정]
DEF_RESTORE_IP="10.10.0.101"
DEF_RESTORE_DIR="/storage/wwwroot/_gemini/mysql_backup"
DEF_RESTORE_DATE=$(date +%Y%m%d)
DEF_RESTORE_DATA=""

# 웹(파라미터) / 터미널(대화형) 분기
if [ "$#" -gt 0 ]; then
    # 파라미터가 있을 경우 (웹 모드)
    RESTORE_IP=${1:-$DEF_RESTORE_IP}
    RESTORE_DIR=${2:-$DEF_RESTORE_DIR}
    RESTORE_DATE=${3:-$DEF_RESTORE_DATE}
    RESTORE_DATA=${4:-$DEF_RESTORE_DATA}
    RESTORE_DATA=$(echo "$RESTORE_DATA" | tr '[:lower:]' '[:upper:]')
else
    # 파라미터가 없을 경우 (대화형 모드)
    echo "----------------------------------------------------"
    echo "  MySQL 데이터베이스 복원 설정을 시작합니다."
    echo "  (입력 없이 Enter를 누르면 기본값이 사용됩니다.)"
    echo "----------------------------------------------------"

    read -p "1. 복원 서버 IP (기본: $DEF_RESTORE_IP): " RESTORE_IP
    RESTORE_IP=${RESTORE_IP:-$DEF_RESTORE_IP}

    read -p "2. 복원 파일 경로 (기본: $DEF_RESTORE_DIR): " RESTORE_DIR
    RESTORE_DIR=${RESTORE_DIR:-$DEF_RESTORE_DIR}

    read -p "3. 복원 날짜 (기본: $DEF_RESTORE_DATE): " RESTORE_DATE
    RESTORE_DATE=${RESTORE_DATE:-$DEF_RESTORE_DATE}

    read -p "4. 복원할 DB 이름 (기본: 디렉토리 백업파일 전체): " RESTORE_DATA
    RESTORE_DATA=${RESTORE_DATA:-$DEF_RESTORE_DATA}
    RESTORE_DATA=$(echo "$RESTORE_DATA" | tr '[:lower:]' '[:upper:]')

    echo ""
    echo "----------------------------------------------------"
    echo " [입력 정보 확인]"
    echo " > 복원 서버 IP: $RESTORE_IP"
    echo " > 대상 DB: ${RESTORE_DATA:-"폴더 내 모든 파일 복원"}"
    echo "----------------------------------------------------"
    read -p " 위 정보를 확인하셨습니까? (Enter를 누르면 시작합니다)" CONFIRM
fi

TARGET_PATH="$RESTORE_DIR/$RESTORE_DATE"
START_DATETIME=$(date "+%Y-%m-%d %H:%M:%S")

if [ ! -d "$TARGET_PATH" ]; then
    echo "❌ 에러: 해당 날짜($RESTORE_DATE)의 백업 폴더가 존재하지 않습니다."
    exit 1
fi

export MYSQL_PWD="$DST_PW"

echo ""
echo "복원 시작: $START_DATETIME"
echo "----------------------------------------------------"

if [ -z "$RESTORE_DATA" ]; then
    DB_LIST=$(ls "$TARGET_PATH"/*.sql.gz 2>/dev/null | xargs -n 1 basename | sed 's/\.sql\.gz//')
    
    if [ -z "$DB_LIST" ]; then
        echo "⚠️  경고: 해당 경로에 복원 가능한 .sql.gz 파일이 없습니다."
        exit 1
    fi
else
    DB_LIST=$(echo "$RESTORE_DATA" | tr ',' ' ')
fi

for DB in $DB_LIST
do
    FILE_NAME="$TARGET_PATH/${DB}.sql.gz"
    
    if [ -f "$FILE_NAME" ]; then
        mysql -h "$RESTORE_IP" -u "$DST_USER" -e "CREATE DATABASE IF NOT EXISTS \`$DB\`;"
        
        gunzip -c "$FILE_NAME" | mysql -h "$RESTORE_IP" -u "$DST_USER" "$DB"
        
        if [ $? -eq 0 ]; then
            echo "${DB}.gz 복원완료"
        else
            echo ">>> [실패] $DB 복원 중 에러 발생"
        fi
    else
        echo "⚠️  경고: $DB 의 복원 파일이 없습니다. (경로: $FILE_NAME)"
    fi
done

unset MYSQL_PWD
END_DATETIME=$(date "+%Y-%m-%d %H:%M:%S")

echo "----------------------------------------------------"
echo "복원 완료: $END_DATETIME"
echo "----------------------------------------------------"