#!/bin/bash

set -e
set -o pipefail
export DEBIAN_FRONTEND=noninteractive

curl -s https://file.winsnip.xyz/file/uploads/Logo-winsip.sh | bash
echo "Starting Auto Install STORAGE NODE OG "
sleep 5

log() { echo -e "\033[1;32m[INFO]\033[0m $1"; }
err() { echo -e "\033[1;31m[ERROR]\033[0m $1" >&2; exit 1; }

log "Mengupdate sistem dan menginstal dependensi..."
sudo apt-get update || err "Gagal update sistem"
sudo apt-get install -y clang cmake build-essential openssl pkg-config libssl-dev || err "Gagal instal dependensi"

log "Menginstal Go..."
GO_VERSION="1.22.0"
wget -q "https://golang.org/dl/go$GO_VERSION.linux-amd64.tar.gz" || err "Gagal mengunduh Go"
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf "go$GO_VERSION.linux-amd64.tar.gz" || err "Gagal ekstrak Go"
rm "go$GO_VERSION.linux-amd64.tar.gz"
echo "export PATH=\$PATH:/usr/local/go/bin:\$HOME/go/bin" >> ~/.bash_profile
source ~/.bash_profile
go version || err "Go tidak terinstal dengan benar"

log "Menginstal Rust..."
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y || err "Gagal menginstal Rust"
source "$HOME/.cargo/env"

log "Mengunduh dan membangun 0g-storage-node..."
cd $HOME
rm -rf 0g-storage-node
git clone https://github.com/0glabs/0g-storage-node.git || err "Gagal clone repository"
cd 0g-storage-node
git checkout v0.8.4 || err "Gagal checkout branch"
git submodule update --init || err "Gagal update submodule"
cargo build --release || err "Gagal build node"

log "Mengunduh konfigurasi..."
mkdir -p $HOME/0g-storage-node/run
wget -O $HOME/0g-storage-node/run/config-testnet-turbo.toml https://josephtran.co/config-testnet-turbo.toml || err "Gagal mengunduh konfigurasi"

echo -n "Masukkan private key Anda: "
read -s PRIVATE_KEY
echo
[[ -z "$PRIVATE_KEY" ]] && err "Private key tidak boleh kosong"

log "Mengatur private key..."
sed -i 's|^\s*#\?\s*miner_key\s*=.*|miner_key = "'"$PRIVATE_KEY"'"|' $HOME/0g-storage-node/run/config-testnet-turbo.toml || err "Gagal menyimpan private key"

log "Memverifikasi konfigurasi..."
grep -E "^(network_dir|network_enr_address|network_enr_tcp_port|network_enr_udp_port|network_libp2p_port|network_discovery_port|rpc_listen_address|rpc_enabled|db_dir|log_config_file|log_contract_address|mine_contract_address|reward_contract_address|log_sync_start_block_number|blockchain_rpc_endpoint|auto_sync_enabled|find_peer_timeout)" $HOME/0g-storage-node/run/config-testnet-turbo.toml || err "Konfigurasi tidak valid"

log "Membuat layanan systemd..."
sudo tee /etc/systemd/system/zgs.service > /dev/null <<EOF
[Unit]
Description=ZGS Node
After=network.target

[Service]
User=$USER
WorkingDirectory=$HOME/0g-storage-node/run
ExecStart=$HOME/0g-storage-node/target/release/zgs_node --config $HOME/0g-storage-node/run/config-testnet-turbo.toml
Restart=on-failure
RestartSec=10
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload || err "Gagal reload systemd"

log "Memulai node..."
sudo systemctl enable zgs || err "Gagal enable layanan"
sudo systemctl restart zgs || err "Gagal memulai layanan"
sleep 5
sudo systemctl status zgs --no-pager || err "Node tidak berjalan dengan benar"

log "Menampilkan log node..."
tail -f ~/0g-storage-node/run/log/zgs.log.$(TZ=UTC date +%Y-%m-%d)
