#!/bin/bash

# File paths
BASE_PATH="/home/sij/hand_of_morpheus"
TOKEN_FILE="$BASE_PATH/.registration_token"
LOG_FILE="$BASE_PATH/token_refresh.log"
BACKUP_PATH="/home/sij/conduwuit_backup"

# Server/domain info
SERVER_DOMAIN="we2.ee"
CONTAINER_NAME="conduwuit"
CONTAINER_IMAGE="conduwuit:custom"
ADDRESS='["0.0.0.0", "::"]'
PORT=8008

# Auto-join room configuration
AUTO_JOIN_ROOMS='["#home:we2.ee","#server:we2.ee"]'

# Function to log with timestamp to both file and terminal
log() {
    local message="$(date --iso-8601=seconds) $1"
    echo "$message" >> "$LOG_FILE"  # Write to log file
    echo "$message"  # Print to terminal
}

# Stop and remove existing container
docker stop "$CONTAINER_NAME" 2>/dev/null
docker rm "$CONTAINER_NAME" 2>/dev/null

# Launch new container
docker run -d \
  -v "db:/var/lib/conduwuit/" \
  -v "${TOKEN_FILE}:/.registration_token:ro" \
  -v "${BACKUP_PATH}:/backup" \
  -e CONDUWUIT_SERVER_NAME="$SERVER_DOMAIN" \
  -e CONDUWUIT_DATABASE_PATH="/var/lib/conduwuit/conduwuit.db" \
  -e CONDUWUIT_DATABASE_BACKUP_PATH="/backup" \
  -e CONDUWUIT_ALLOW_REGISTRATION=true \
  -e CONDUWUIT_REGISTRATION_TOKEN_FILE="/.registration_token" \
  -e CONDUWUIT_ADDRESS="$ADDRESS" \
  -e CONDUWUIT_PORT="$PORT" \
  -e CONDUWUIT_NEW_USER_DISPLAYNAME_SUFFIX="" \
  -e CONDUWUIT_AUTO_JOIN_ROOMS="$AUTO_JOIN_ROOMS" \
  -e CONDUWUIT_FORGET_FORCED_UPON_LEAVE=true \
  -e CONDUWUIT_DB_CACHE_CAPACITY_MB=1024 \
  -e CONDUWUIT_DB_WRITE_BUFFER_CAPACITY_MB=256 \
  -e CONDUWUIT_DB_POOL_WORKERS=64 \
  -e CONDUWUIT_DB_POOL_WORKERS_LIMIT=128 \
  -e CONDUWUIT_STREAM_AMPLIFICATION=8192 \
  -e CONDUWUIT_MAX_REQUEST_SIZE=33554432 \
  -e CONDUWUIT_CACHE_CAPACITY_MODIFIER=1.5 \
  -e CONDUWUIT_ALLOW_FEDERATION=true \
  -e CONDUWUIT_ALLOW_PUBLIC_ROOM_DIRECTORY_OVER_FEDERATION=true \
  -e CONDUWUIT_ALLOW_PUBLIC_ROOM_DIRECTORY_WITHOUT_AUTH=true \
  -e CONDUWUIT_WELL_KNOWN_CONN_TIMEOUT=30 \
  -e CONDUWUIT_FEDERATION_TIMEOUT=600 \
  -e CONDUWUIT_FEDERATION_IDLE_TIMEOUT=60 \
  -e CONDUWUIT_SENDER_TIMEOUT=600 \
  -e CONDUWUIT_SENDER_IDLE_TIMEOUT=360 \
  -e CONDUWUIT_SENDER_SHUTDOWN_TIMEOUT=30 \
  -e CONDUWUIT_DNS_CACHE_ENTRIES=1000 \
  -e CONDUWUIT_DNS_MIN_TTL=300 \
  -e CONDUWUIT_DNS_MIN_TTL_NXDOMAIN=600 \
  -e CONDUWUIT_DNS_TCP_FALLBACK=true \
  -e CONDUWUIT_IP_LOOKUP_STRATEGY=3 \
  -e RUST_LOG="conduwuit=trace,reqwest=trace,hickory_proto=trace" \
  --network host \
  --name "$CONTAINER_NAME" \
  --restart unless-stopped \
  "$CONTAINER_IMAGE"
if [ $? -ne 0 ]; then
    log "ERROR: Failed to create new conduwuit container"
    exit 1
fi

log "Successfully recreated container \"$CONTAINER_NAME\" with image \"$CONTAINER_IMAGE\" and these parameters:"
log " - domain: $SERVER_DOMAIN"
log " - address: $ADDRESS"
log " - port: $PORT"
log " - auto-join rooms: $AUTO_JOIN_ROOMS"