#!/bin/bash
# ═══════════════════════════════════════════════════════════════
# Cryptoments v1 → v2 마이그레이션 실행 스크립트
# ═══════════════════════════════════════════════════════════════
#
# 사전 준비:
#   1. MySQL 8.0 서버 실행 중 (localhost:3306)
#   2. v1 백업 파일: coin_payments_2026-04-03.sql
#   3. v2 DDL 파일: CRYPTOMENTS_V2_DDL.sql
#
# 사용법:
#   ./run_migration.sh              # 전체 실행
#   ./run_migration.sh --dry-run    # 건수만 확인

set -e

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
V1_DUMP="${SCRIPT_DIR}/../coin_payments_2026-04-03.sql"
V2_DDL="${SCRIPT_DIR}/CRYPTOMENTS_V2_DDL.sql"
MIGRATION="${SCRIPT_DIR}/migrate_v1_to_v2.py"

DB_HOST="localhost"
DB_PORT="3306"
DB_USER="root"
DB_PASS="1qw2!QW@"

echo "═══════════════════════════════════════════════════"
echo " Cryptoments v1 → v2 Migration"
echo "═══════════════════════════════════════════════════"

# ─── Step 1: Python 의존성 확인 ───
echo ""
echo "▶ Step 1: Python 의존성 확인..."
python3 -c "import mysql.connector; from cryptography.hazmat.primitives.ciphers.aead import AESGCM" 2>/dev/null || {
    echo "  ⚠️  필수 패키지 설치 중..."
    pip3 install mysql-connector-python cryptography
}
echo "  ✅ Python 의존성 OK"

# ─── Step 2: v1 DB 복원 ───
echo ""
echo "▶ Step 2: v1 DB (coin_payments) 복원..."
if [ ! -f "$V1_DUMP" ]; then
    echo "  ❌ v1 백업 파일 없음: $V1_DUMP"
    echo "     coin_payments_2026-04-03.sql 파일을 v2-docs/ 상위 디렉토리에 넣어주세요."
    exit 1
fi

mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" -e "CREATE DATABASE IF NOT EXISTS coin_payments CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" 2>/dev/null
mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" coin_payments < "$V1_DUMP" 2>/dev/null
V1_COUNT=$(mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" -N -e "SELECT COUNT(*) FROM coin_payments.wallet_addresses;" 2>/dev/null)
echo "  ✅ coin_payments 복원 완료 (wallet_addresses: ${V1_COUNT}건)"

# ─── Step 3: v2 DB 초기화 (DDL) ───
echo ""
echo "▶ Step 3: v2 DB (cryptoments_db) DDL 적용..."
if [ ! -f "$V2_DDL" ]; then
    echo "  ❌ DDL 파일 없음: $V2_DDL"
    exit 1
fi

mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" -e "DROP DATABASE IF EXISTS cryptoments_db; CREATE DATABASE cryptoments_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" 2>/dev/null
mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" cryptoments_db < "$V2_DDL" 2>/dev/null
V2_TABLES=$(mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" -N -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='cryptoments_db';" 2>/dev/null)
echo "  ✅ cryptoments_db DDL 적용 완료 (${V2_TABLES}개 테이블)"

# ─── Step 4: 마이그레이션 실행 ───
echo ""
echo "▶ Step 4: 마이그레이션 실행..."
echo ""

if [ "$1" = "--dry-run" ]; then
    python3 "$MIGRATION" --dry-run
else
    python3 "$MIGRATION"
fi

echo ""
echo "═══════════════════════════════════════════════════"
echo " 마이그레이션 완료!"
echo "═══════════════════════════════════════════════════"

# ─── Step 5: 간단 검증 ───
echo ""
echo "▶ 빠른 검증:"
mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" cryptoments_db -e "
SELECT 'hd_wallets' as tbl, COUNT(*) as cnt FROM hd_wallets
UNION ALL SELECT 'wallet_addresses (ADMIN/GAS/RELAYER)', COUNT(*) FROM wallet_addresses WHERE wallet_type IN ('ADMIN','GAS','RELAYER')
UNION ALL SELECT 'wallet_addresses (HOT/MASTER)', COUNT(*) FROM wallet_addresses WHERE wallet_type IN ('HOT','MASTER')
UNION ALL SELECT 'wallet_keys (AES-256-GCM)', COUNT(*) FROM wallet_keys WHERE encryption_algorithm='AES-256-GCM'
UNION ALL SELECT 'wallet_keys (AES/GCM/NoPadding)', COUNT(*) FROM wallet_keys WHERE encryption_algorithm='AES/GCM/NoPadding'
UNION ALL SELECT 'relayer_contracts', COUNT(*) FROM relayer_contracts
UNION ALL SELECT 'partners', COUNT(*) FROM partners
UNION ALL SELECT 'deposits', COUNT(*) FROM deposits
UNION ALL SELECT 'withdrawals', COUNT(*) FROM withdrawals;
" 2>/dev/null
