#!/bin/bash
set -e

# Setup ENV
source ~/cloud-env.sh

echo export REGION_NAME=${REGION_NAME} >> ~/cloud-env.sh

# The instructor's name tag shared by your instructor.
echo export HOST_MONITOR1_PRIVATE_IP=${HOST_MONITOR1_PRIVATE_IP} > /home/ec2-user/hosts-env.sh
echo export HOST_MONITOR1_PUBLIC_IP=${HOST_MONITOR1_PUBLIC_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_CM_PRIVATE_IP=${HOST_MONITOR1_PRIVATE_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_CM_PUBLIC_IP=${HOST_MONITOR1_PUBLIC_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_PD1_PRIVATE_IP=${HOST_PD1_PRIVATE_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_PD1_PUBLIC_IP=${HOST_PD1_PUBLIC_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_PD2_PRIVATE_IP=${HOST_PD2_PRIVATE_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_PD2_PUBLIC_IP=${HOST_PD2_PUBLIC_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_PD3_PRIVATE_IP=${HOST_PD3_PRIVATE_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_PD3_PUBLIC_IP=${HOST_PD3_PUBLIC_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_DB1_PRIVATE_IP=${HOST_DB1_PRIVATE_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_DB1_PUBLIC_IP=${HOST_DB1_PUBLIC_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_DB2_PRIVATE_IP=${HOST_DB2_PRIVATE_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_DB2_PUBLIC_IP=${HOST_DB2_PUBLIC_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_KV1_PRIVATE_IP=${HOST_KV1_PRIVATE_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_KV1_PUBLIC_IP=${HOST_KV1_PUBLIC_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_KV2_PRIVATE_IP=${HOST_KV2_PRIVATE_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_KV2_PUBLIC_IP=${HOST_KV2_PUBLIC_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_KV3_PRIVATE_IP=${HOST_KV3_PRIVATE_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_KV3_PUBLIC_IP=${HOST_KV3_PUBLIC_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_TIFLASH1_PRIVATE_IP=${HOST_TIFLASH1_PRIVATE_IP} >> /home/ec2-user/hosts-env.sh
echo export HOST_TIFLASH1_PUBLIC_IP=${HOST_TIFLASH1_PUBLIC_IP} >> /home/ec2-user/hosts-env.sh

source /home/ec2-user/hosts-env.sh

echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_CM_PRIVATE_IP} > /home/ec2-user/ssh-to-cm.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_PD1_PRIVATE_IP} > /home/ec2-user/ssh-to-pd1.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_PD2_PRIVATE_IP} > /home/ec2-user/ssh-to-pd2.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_PD3_PRIVATE_IP} > /home/ec2-user/ssh-to-pd3.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_DB1_PRIVATE_IP} > /home/ec2-user/ssh-to-db1.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_DB2_PRIVATE_IP} > /home/ec2-user/ssh-to-db2.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_MONITOR1_PRIVATE_IP} > /home/ec2-user/ssh-to-monitor1.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_KV1_PRIVATE_IP} > /home/ec2-user/ssh-to-kv1.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_KV2_PRIVATE_IP} > /home/ec2-user/ssh-to-kv2.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_KV3_PRIVATE_IP} > /home/ec2-user/ssh-to-kv3.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_TIFLASH1_PRIVATE_IP} > /home/ec2-user/ssh-to-tiflash1.sh
chmod +x /home/ec2-user/*.sh

# Setup Ten Nodes TiDB Cluster Topology
cp /home/ec2-user/template-ten-nodes.yaml /home/ec2-user/solution-topology-ten-nodes.yaml
sed -i'' \
  -e "s/<HOST_PD1_PUBLIC_IP>/${HOST_PD1_PUBLIC_IP}/g" \
  -e "s/<HOST_PD2_PUBLIC_IP>/${HOST_PD2_PUBLIC_IP}/g" \
  -e "s/<HOST_PD3_PUBLIC_IP>/${HOST_PD3_PUBLIC_IP}/g" \
  -e "s/<HOST_PD1_PRIVATE_IP>/${HOST_PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_PD2_PRIVATE_IP>/${HOST_PD2_PRIVATE_IP}/g" \
  -e "s/<HOST_PD3_PRIVATE_IP>/${HOST_PD3_PRIVATE_IP}/g" \
  -e "s/<HOST_KV1_PRIVATE_IP>/${HOST_KV1_PRIVATE_IP}/g" \
  -e "s/<HOST_KV2_PRIVATE_IP>/${HOST_KV2_PRIVATE_IP}/g" \
  -e "s/<HOST_KV3_PRIVATE_IP>/${HOST_KV3_PRIVATE_IP}/g" \
  -e "s/<HOST_DB1_PRIVATE_IP>/${HOST_DB1_PRIVATE_IP}/g" \
  -e "s/<HOST_DB2_PRIVATE_IP>/${HOST_DB2_PRIVATE_IP}/g" \
  -e "s/<HOST_MONITOR1_PRIVATE_IP>/${HOST_MONITOR1_PRIVATE_IP}/g" \
  -e "s/<HOST_TIFLASH1_PRIVATE_IP>/${HOST_TIFLASH1_PRIVATE_IP}/g" \
  /home/ec2-user/solution-topology-ten-nodes.yaml 2>/dev/null

# Setup Ten Nodes TiDB Cluster Topology for fff3
cp /home/ec2-user/template-ten-nodes-fff3.yaml /home/ec2-user/solution-topology-ten-nodes-fff3.yaml
sed -i'' \
  -e "s/<HOST_PD1_PUBLIC_IP>/${HOST_PD1_PUBLIC_IP}/g" \
  -e "s/<HOST_PD2_PUBLIC_IP>/${HOST_PD2_PUBLIC_IP}/g" \
  -e "s/<HOST_PD3_PUBLIC_IP>/${HOST_PD3_PUBLIC_IP}/g" \
  -e "s/<HOST_PD1_PRIVATE_IP>/${HOST_PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_PD2_PRIVATE_IP>/${HOST_PD2_PRIVATE_IP}/g" \
  -e "s/<HOST_PD3_PRIVATE_IP>/${HOST_PD3_PRIVATE_IP}/g" \
  -e "s/<HOST_KV1_PRIVATE_IP>/${HOST_KV1_PRIVATE_IP}/g" \
  -e "s/<HOST_KV2_PRIVATE_IP>/${HOST_KV2_PRIVATE_IP}/g" \
  -e "s/<HOST_KV3_PRIVATE_IP>/${HOST_KV3_PRIVATE_IP}/g" \
  -e "s/<HOST_DB1_PRIVATE_IP>/${HOST_DB1_PRIVATE_IP}/g" \
  -e "s/<HOST_DB2_PRIVATE_IP>/${HOST_DB2_PRIVATE_IP}/g" \
  -e "s/<HOST_MONITOR1_PRIVATE_IP>/${HOST_MONITOR1_PRIVATE_IP}/g" \
  -e "s/<HOST_TIFLASH1_PRIVATE_IP>/${HOST_TIFLASH1_PRIVATE_IP}/g" \
  /home/ec2-user/solution-topology-ten-nodes-fff3.yaml 2>/dev/null

# Setup Placement Rule Topology
cp /home/ec2-user/template-topology-placement-rule.yaml /home/ec2-user/solution-topology-placement-rule.yaml
sed -i'' \
  -e "s/<HOST_KV1_PRIVATE_IP>/${HOST_KV1_PRIVATE_IP}/g" \
  -e "s/<HOST_KV2_PRIVATE_IP>/${HOST_KV2_PRIVATE_IP}/g" \
  -e "s/<HOST_KV3_PRIVATE_IP>/${HOST_KV3_PRIVATE_IP}/g" \
  /home/ec2-user/solution-topology-placement-rule.yaml 2>/dev/null

# Setup Six Nodes DM Cluster Topology
cp /home/ec2-user/template-dm-six-nodes.yaml /home/ec2-user/solution-dm-topology-six-nodes.yaml
sed -i'' \
  -e "s/<HOST_PD1_PRIVATE_IP>/${HOST_PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_PD2_PRIVATE_IP>/${HOST_PD2_PRIVATE_IP}/g" \
  -e "s/<HOST_PD3_PRIVATE_IP>/${HOST_PD3_PRIVATE_IP}/g" \
  -e "s/<HOST_KV1_PRIVATE_IP>/${HOST_KV1_PRIVATE_IP}/g" \
  -e "s/<HOST_KV2_PRIVATE_IP>/${HOST_KV2_PRIVATE_IP}/g" \
  -e "s/<HOST_KV3_PRIVATE_IP>/${HOST_KV3_PRIVATE_IP}/g" \
  -e "s/<HOST_MONITOR1_PRIVATE_IP>/${HOST_MONITOR1_PRIVATE_IP}/g" \
  /home/ec2-user/solution-dm-topology-six-nodes.yaml 2>/dev/null

# Setup Six Nodes DM Cluster Topology
cp /home/ec2-user/template-dm-scale.yaml /home/ec2-user/solution-dm-scale.yaml
sed -i'' \
  -e "s/<HOST_KV1_PRIVATE_IP>/${HOST_KV1_PRIVATE_IP}/g" \
  /home/ec2-user/solution-dm-scale.yaml 2>/dev/null

# Setup sync-diff task configuration
cp /home/ec2-user/template-sync-diff-config.toml /home/ec2-user/solution-sync-diff-config.toml
sed -i'' \
  -e "s/<HOST_PD3_PRIVATE_IP>/${HOST_PD3_PRIVATE_IP}/g" \
  -e "s/<HOST_DB1_PRIVATE_IP>/${HOST_DB1_PRIVATE_IP}/g" \
  /home/ec2-user/solution-sync-diff-config.toml 2>/dev/null

# Setup three-nodes-scale-out-ticdc.yaml
cp /home/ec2-user/template-three-nodes-scale-out-ticdc.yaml /home/ec2-user/solution-three-nodes-scale-out-ticdc.yaml
sed -i'' \
  -e "s/<HOST_PD1_PRIVATE_IP>/${HOST_PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_PD2_PRIVATE_IP>/${HOST_PD2_PRIVATE_IP}/g" \
  -e "s/<HOST_PD3_PRIVATE_IP>/${HOST_PD3_PRIVATE_IP}/g" \
  /home/ec2-user/solution-three-nodes-scale-out-ticdc.yaml 2>/dev/null

# Setup lightning-csv.toml
cp /home/ec2-user/template-lightning-csv.toml /home/ec2-user/solution-lightning-csv.toml
sed -i'' \
  -e "s/<HOST_PD1_PRIVATE_IP>/${HOST_PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_DB1_PRIVATE_IP>/${HOST_DB1_PRIVATE_IP}/g" \
  /home/ec2-user/solution-lightning-csv.toml 2>/dev/null

# Setup lightning-p1.toml
cp /home/ec2-user/template-lightning-p1.toml /home/ec2-user/solution-lightning-p1.toml
sed -i'' \
  -e "s/<HOST_PD1_PRIVATE_IP>/${HOST_PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_DB1_PRIVATE_IP>/${HOST_DB1_PRIVATE_IP}/g" \
  /home/ec2-user/solution-lightning-p1.toml 2>/dev/null

# Setup lightning-p2.toml
cp /home/ec2-user/template-lightning-p2.toml /home/ec2-user/solution-lightning-p2.toml
sed -i'' \
  -e "s/<HOST_PD1_PRIVATE_IP>/${HOST_PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_DB2_PRIVATE_IP>/${HOST_DB2_PRIVATE_IP}/g" \
  /home/ec2-user/solution-lightning-p2.toml 2>/dev/null

# Setup lightning-sql.toml
cp /home/ec2-user/template-lightning-sql.toml /home/ec2-user/solution-lightning-sql.toml
sed -i'' \
  -e "s/<HOST_PD1_PRIVATE_IP>/${HOST_PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_DB1_PRIVATE_IP>/${HOST_DB1_PRIVATE_IP}/g" \
  /home/ec2-user/solution-lightning-sql.toml 2>/dev/null

# Setup lightning-init.toml
cp /home/ec2-user/template-lightning-init.toml /home/ec2-user/solution-lightning-init.toml
sed -i'' \
  -e "s/<HOST_PD1_PRIVATE_IP>/${HOST_PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_DB1_PRIVATE_IP>/${HOST_DB1_PRIVATE_IP}/g" \
  /home/ec2-user/solution-lightning-init.toml 2>/dev/null

# Setup TiUP meta.yaml
cp /home/ec2-user/template-tiup-meta.yaml /home/ec2-user/solution-tiup-meta.yaml
sed -i'' \
  -e "s/<HOST_PD1_PRIVATE_IP>/${HOST_PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_PD2_PRIVATE_IP>/${HOST_PD2_PRIVATE_IP}/g" \
  -e "s/<HOST_PD3_PRIVATE_IP>/${HOST_PD3_PRIVATE_IP}/g" \
  -e "s/<HOST_TIFLASH1_PRIVATE_IP>/${HOST_TIFLASH1_PRIVATE_IP}/g" \
  -e "s/<HOST_KV1_PRIVATE_IP>/${HOST_KV1_PRIVATE_IP}/g" \
  -e "s/<HOST_KV2_PRIVATE_IP>/${HOST_KV2_PRIVATE_IP}/g" \
  -e "s/<HOST_KV3_PRIVATE_IP>/${HOST_KV3_PRIVATE_IP}/g" \
  -e "s/<HOST_DB1_PRIVATE_IP>/${HOST_DB1_PRIVATE_IP}/g" \
  -e "s/<HOST_DB2_PRIVATE_IP>/${HOST_DB2_PRIVATE_IP}/g" \
  -e "s/<HOST_MONITOR1_PRIVATE_IP>/${HOST_MONITOR1_PRIVATE_IP}/g" \
  /home/ec2-user/solution-tiup-meta.yaml 2>/dev/null

# Setup dm-task.yaml
cp /home/ec2-user/template-dm-task.yaml /home/ec2-user/solution-dm-task.yaml
sed -i'' \
  -e "s/<HOST_PD1_PRIVATE_IP>/${HOST_PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_PD2_PRIVATE_IP>/${HOST_PD2_PRIVATE_IP}/g" \
  -e "s/<HOST_PD3_PRIVATE_IP>/${HOST_PD3_PRIVATE_IP}/g" \
  -e "s/<HOST_TIFLASH1_PRIVATE_IP>/${HOST_TIFLASH1_PRIVATE_IP}/g" \
  -e "s/<HOST_KV1_PRIVATE_IP>/${HOST_KV1_PRIVATE_IP}/g" \
  -e "s/<HOST_KV2_PRIVATE_IP>/${HOST_KV2_PRIVATE_IP}/g" \
  -e "s/<HOST_KV3_PRIVATE_IP>/${HOST_KV3_PRIVATE_IP}/g" \
  -e "s/<HOST_DB1_PRIVATE_IP>/${HOST_DB1_PRIVATE_IP}/g" \
  -e "s/<HOST_DB2_PRIVATE_IP>/${HOST_DB2_PRIVATE_IP}/g" \
  -e "s/<HOST_MONITOR1_PRIVATE_IP>/${HOST_MONITOR1_PRIVATE_IP}/g" \
  /home/ec2-user/solution-dm-task.yaml 2>/dev/null

# Setup scale-out-tikv.yaml
cp /home/ec2-user/template-scale-out-tikv.yaml /home/ec2-user/solution-scale-out-tikv.yaml
sed -i'' \
  -e "s/<HOST_MONITOR1_PRIVATE_IP>/${HOST_MONITOR1_PRIVATE_IP}/g" \
  /home/ec2-user/solution-scale-out-tikv.yaml 2>/dev/null

# Setup clean-bucket.sh script
cp /home/ec2-user/template-clean-bucket.sh /home/ec2-user/clean-bucket.sh
sed -i'' \
  -e "s/<USER_UNIQUE_TAG>/${USER_UNIQUE_TAG}/g" \
  -e "s/<USER>/${USER}/g" \
  /home/ec2-user/clean-bucket.sh 2>/dev/null

# Setup Java
cp /home/ec2-user/template-JdbcConnect.java /home/ec2-user/JdbcConnect.java
sed -i'' \
  -e "s/<HOST_DB1_PRIVATE_IP>/${HOST_DB1_PRIVATE_IP}/g" \
  -e "s/<HOST_DB2_PRIVATE_IP>/${HOST_DB2_PRIVATE_IP}/g" \
  /home/ec2-user/JdbcConnect.java 2>/dev/null

# Setup Python
cp /home/ec2-user/template-PythonConnect.py /home/ec2-user/PythonConnect.py
sed -i'' \
  -e "s/<HOST_DB1_PRIVATE_IP>/${HOST_DB1_PRIVATE_IP}/g" \
  -e "s/<HOST_DB2_PRIVATE_IP>/${HOST_DB2_PRIVATE_IP}/g" \
  /home/ec2-user/PythonConnect.py 2>/dev/null

# Download additional files
case ${REGION_CODE} in
    "us-west-2")
        wget https://pingcap-edu.s3.us-west-2.amazonaws.com/tidb-community-toolkit-v7.5.1-linux-amd64.tar.gz
        ;;
    "ap-northeast-1")
        wget https://pingcap-edu-japan.s3.ap-northeast-1.amazonaws.com/tidb-community-toolkit-v7.5.1-linux-amd64.tar.gz
        ;;
    "ap-southeast-1")
        wget https://pingcap-edu-apac.s3.ap-southeast-1.amazonaws.com/tidb-community-toolkit-v7.5.1-linux-amd64.tar.gz
        ;;
    "eu-central-1")
        wget https://pingcap-edu-frankfurt.s3.eu-central-1.amazonaws.com/tidb-community-toolkit-v7.5.1-linux-amd64.tar.gz
        ;;
esac

echo
echo "10 nodes are prepared for user ${USER_UNIQUE_TAG}."  > MONITOR_PREPARE_DONE

rm -rf /home/ec2-user/template-*
