#!/bin/bash

# MySQL Database Restore Script - Simple version

set -e

# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# Configuration
BACKUP_DIR="$(pwd)/database/backups/mysql"
BACKUP_FILE="$1"

echo -e "${YELLOW}========================================"
echo -e "MySQL Database Restore"
echo -e "========================================${NC}"
echo

# Validate backup file
if [ -z "$BACKUP_FILE" ]; then
    echo -e "${RED}Error: No backup file specified${NC}"
    echo
    echo -e "${BLUE}Usage: $0 <backup_filename>${NC}"
    echo
    echo -e "${BLUE}Available backups (10 most recent):${NC}"
    ls -lt "$BACKUP_DIR"/*.gz 2>/dev/null | head -10 | awk '{print "  " $9}' | xargs -I {} basename {}
    exit 1
fi

# Find backup file
if [ -f "$BACKUP_FILE" ]; then
    BACKUP_PATH="$BACKUP_FILE"
elif [ -f "$BACKUP_DIR/$BACKUP_FILE" ]; then
    BACKUP_PATH="$BACKUP_DIR/$BACKUP_FILE"
else
    echo -e "${RED}Error: Backup not found: $BACKUP_FILE${NC}"
    exit 1
fi

# Read .env for database credentials
source .env 2>/dev/null || true

if [ -z "$DB_DATABASE" ] || [ -z "$DB_USERNAME" ] || [ -z "$DB_PASSWORD" ]; then
    echo -e "${RED}Error: Database credentials not found in .env${NC}"
    exit 1
fi

DB_HOST="${DB_HOST:-127.0.0.1}"
DB_PORT="${DB_PORT:-3306}"

echo -e "${YELLOW}Backup Information:${NC}"
echo "  File: $(basename "$BACKUP_PATH")"
echo "  Size: $(ls -lh "$BACKUP_PATH" | awk '{print $5}')"
echo "  Target: $DB_DATABASE"
echo

# Show metadata if available
META_FILE="${BACKUP_PATH%.gz}.meta.json"
if [ -f "$META_FILE" ]; then
    echo -e "${YELLOW}Backup Metadata:${NC}"
    echo "  Created: $(jq -r '.backup_timestamp' "$META_FILE" 2>/dev/null || echo 'N/A')"
    echo "  Orders: $(jq -r '.table_counts.orders // "N/A"' "$META_FILE" 2>/dev/null)"
    echo "  Events: $(jq -r '.table_counts.events // "N/A"' "$META_FILE" 2>/dev/null)"
    echo
fi

# Confirmation
echo -e "${YELLOW}⚠️  WARNING: This will REPLACE the current database!${NC}"
echo
read -p "Continue? (yes/no): " CONFIRM

if [ "$CONFIRM" != "yes" ]; then
    echo -e "${BLUE}Cancelled${NC}"
    exit 0
fi

echo
echo -e "${YELLOW}Creating safety backup...${NC}"

SAFETY_BACKUP="$BACKUP_DIR/pre_restore_$(date +%Y%m%d_%H%M%S).sql.gz"
export MYSQL_PWD="$DB_PASSWORD"

if mysqldump -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USERNAME" \
    --single-transaction --quick "$DB_DATABASE" 2>&1 | grep -v "password" | gzip > "$SAFETY_BACKUP"; then
    echo -e "${GREEN}✓ Safety backup created${NC}"
else
    echo -e "${RED}✗ Safety backup failed${NC}"
    unset MYSQL_PWD
    exit 1
fi

echo
echo -e "${YELLOW}Restoring...${NC}"

if gunzip -c "$BACKUP_PATH" | mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USERNAME" "$DB_DATABASE" 2>&1 | grep -v "password"; then
    echo -e "${GREEN}✓ Restore complete!${NC}"
else
    echo -e "${RED}✗ Restore failed${NC}"
    unset MYSQL_PWD
    exit 1
fi

unset MYSQL_PWD

echo
echo -e "${YELLOW}Verification:${NC}"

# Quick count check
export MYSQL_PWD="$DB_PASSWORD"
ORDER_COUNT=$(mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USERNAME" "$DB_DATABASE" -sN -e "SELECT COUNT(*) FROM orders" 2>/dev/null || echo "0")
EVENT_COUNT=$(mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USERNAME" "$DB_DATABASE" -sN -e "SELECT COUNT(*) FROM events" 2>/dev/null || echo "0")
unset MYSQL_PWD

echo "  Orders: $ORDER_COUNT"
echo "  Events: $EVENT_COUNT"

echo
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}Success!${NC}"
echo -e "${GREEN}========================================${NC}"
echo
echo -e "${BLUE}Safety backup: $(basename "$SAFETY_BACKUP")${NC}"
echo
