#!/bin/bash
set -e

# Restore the original password
ORIGINAL_PASSWORD=$(echo "${SERVERLESS_CLUSTER_PASSWORD}" | sed 's/\\\$/\$/g' | sed 's/\\\!/\!/g' | sed 's/\\\^/\^/g')

# Creating the database if it doesn't exist
echo "Creating the database if it doesn't exist..."
cat > ~/.my.cnf <<EOF
[client]
host=${SERVERLESS_CLUSTER_HOST}
port=${SERVERLESS_CLUSTER_PORT}
user='${SERVERLESS_CLUSTER_USERNAME}'
password='${ORIGINAL_PASSWORD}'
EOF

chmod 600 ~/.my.cnf

mysql -e "CREATE DATABASE IF NOT EXISTS \`${SERVERLESS_CLUSTER_DATABASE_NAME}\`;"

mkdir -p /home/ubuntu/demo_204/

# Clone the repository
echo "Cloning repository..."
TEMP_DIR=$(mktemp -d)
curl -L https://github.com/pingcap-inc/tidb-course-labs/tarball/main | tar -xz -C "${TEMP_DIR}"
REPO_DIR=$(find "${TEMP_DIR}" -maxdepth 1 -type d -name "pingcap-inc-tidb-course-labs-*" | head -n 1)
if [ -d "${REPO_DIR}/labs/demo_204/Mshop" ]; then
  cp -r "${REPO_DIR}/labs/demo_204/Mshop" /home/ubuntu/demo_204/
else
  echo "Error: Mshop directory not found in repository"
  exit 1
fi
rm -rf "${TEMP_DIR}"

# Write .env file
cat > /home/ubuntu/demo_204/Mshop/.env <<EOF
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:UyFrMdp9tPRpq5jpEd7l2B4RtwEgRXE/9sBz9clB9b4=
APP_DEBUG=true
APP_URL=http://127.0.0.1:8000
URL_PREFIX=/vscode/proxy/8000

APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US

APP_MAINTENANCE_DRIVER=file

LOG_CHANNEL=stack
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql

# local mysql
DB_PORT=3306
DB_HOST=mysql
DB_USERNAME=lab
DB_PASSWORD=labpass
DB_DATABASE=${SERVERLESS_CLUSTER_DATABASE_NAME}

# tidb cloud cluster
# DB_PORT=${SERVERLESS_CLUSTER_PORT}
# DB_HOST=${SERVERLESS_CLUSTER_HOST}
# DB_USERNAME='${SERVERLESS_CLUSTER_USERNAME}'
# DB_PASSWORD='${ORIGINAL_PASSWORD}'
# DB_DATABASE=${SERVERLESS_CLUSTER_DATABASE_NAME}
# MYSQL_ATTR_SSL_CA=/etc/ssl/certs/ca-certificates.crt

SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null

FILESYSTEM_DISK=local
CACHE_STORE=database
EOF

mkdir -p /home/ubuntu/demo_204/deploy

mkdir -p /home/ubuntu/demo_204/deploy/mysql-init
cat > /home/ubuntu/demo_204/deploy/mysql-init/00-grant-lab.sql <<'EOF'
GRANT ALL PRIVILEGES ON *.* TO 'lab'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF

cat > /home/ubuntu/demo_204/deploy/docker-compose.yml <<EOF
services:
  tidb-lab-vscode:
    image: wangdi4zm/tidb-lab-php-vscode:1.0
    restart: unless-stopped
    ports:
      - "3000:8080"
      - "8000:8000"
      - "8501:8501"
      - "5173:5173"
      - "8502:8502"
    environment:
      SERVERLESS_CLUSTER_HOST: ${SERVERLESS_CLUSTER_HOST}
      SERVERLESS_CLUSTER_PORT: ${SERVERLESS_CLUSTER_PORT}
      SERVERLESS_CLUSTER_USERNAME: '${SERVERLESS_CLUSTER_USERNAME}'
      SERVERLESS_CLUSTER_PASSWORD: ${ORIGINAL_PASSWORD}
      SERVERLESS_CLUSTER_DATABASE_NAME: ${SERVERLESS_CLUSTER_DATABASE_NAME}
      SERVERLESS_CLUSTER_ID: ${SERVERLESS_CLUSTER_ID}
    volumes:
      - /home/ubuntu/demo_204/Mshop:/root/Mshop
    depends_on:
      - mysql
    networks:
      - lab-net

  mysql:
    image: mysql:8.0
    restart: unless-stopped
    command: >
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: ${SERVERLESS_CLUSTER_DATABASE_NAME}
      MYSQL_USER: lab
      MYSQL_PASSWORD: labpass
    volumes:
      - mysql-data:/var/lib/mysql
      - /home/ubuntu/demo_204/deploy/mysql-init:/docker-entrypoint-initdb.d
    networks:
      - lab-net

volumes:
  mysql-data:

networks:
  lab-net:
    driver: bridge
EOF


# Start the VS Code and MySQL containers
cd /home/ubuntu/demo_204/deploy
docker compose up -d
