#!/bin/bash

#!/bin/bash

# Usage: ./build_lxc_script.sh <CT_ID> <CT_Name> <Role>
# Example: ./build_lxc_script.sh 100 gitea-ct gitea
# Roles: gitea, npm, owncloud, bare
# Network: 192.168.88.0/24, GW/DNS: 192.168.88.1

set -e

if [ "$#" -ne 3 ]; then
    echo "Usage: $0 <CT_ID> <CT_Name> <Role>"
    echo "Example: $0 100 gitea-ct gitea"
    exit 1
fi

CT_ID=$1
CT_NAME=$2
ROLE=$3

# Network Configuration
TARGET_IP="192.168.88.99" # CHANGE THIS for each container!
GW="192.168.88.1"
DNS="192.168.88.1"
BRIDGE="vmbr0"

# Template Configuration
# Ensure you ran: pveam download local debian-13-standard_13.1-2_amd64.tar.zst
TEMPLATE_NAME="debian-13-standard_13.1-2_amd64.tar.zst"
TEMPLATE="local:vztmpl/${TEMPLATE_NAME}"

# Check if template exists
if ! pveam list local | grep -q "$TEMPLATE_NAME"; then
    echo "ERROR: Template $TEMPLATE_NAME not found!"
    echo "Please run: pveam download local $TEMPLATE_NAME"
    exit 1
fi

# Check if container ID exists
if pct status "$CT_ID" &>/dev/null; then
    echo "Error: Container ID ${CT_ID} already exists."
    exit 1
fi

echo "==> Building Proxmox LXC ${CT_NAME} (ID: ${CT_ID}) with role: ${ROLE}"

# 1. Define Cloud-Init User Data based on Role
generate_user_data() {
    local role=$1
    cat <<EOF
#cloud-config
hostname: ${CT_NAME}
package_update: true
package_upgrade: true

users:
  - name: sysadm
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - $(cat /var/lib/lxc/ssh-keys/id_ed25519.pub 2>/dev/null || cat ~/.ssh/id_rsa.pub 2>/dev/null || echo "SSH_KEY_NOT_FOUND")
    lock_passwd: false
    passwd: \$6\$rounds=4096\$sgpGmLjxOIXm.seE\$l4VX1Kq3VCb8Dt123huOfOERmPY9/QwkCP8RP23.G9H0vUSqrYemYovVq/TKj9sGfinIMIex/uQAZ.azmgi/d.

# packages:
#  - curl
#  - wget
#  - git
#  - ca-certificates
#  - gnupg
EOF

    case $role in
        gitea)
            cat <<'EOF'
  - mysql-server
  - postgresql
runcmd:
  - wget -O /tmp/gitea https://dl.gitea.com/gitea/latest/gitea-linux-amd64
  - chmod +x /tmp/gitea
  - mv /tmp/gitea /usr/local/bin/gitea
  - echo "Gitea installed" >> /var/log/role-gitea.log
EOF
            ;;
        npm)
            cat <<'EOF'
  - docker.io
runcmd:
  - systemctl enable docker
  - systemctl start docker
  - usermod -aG docker admin
  - mkdir -p /opt/npm
  - echo "Docker installed for NPM" >> /var/log/role-npm.log
EOF
            ;;
        owncloud)
            cat <<'EOF'
  - apache2
  - mariadb-server
  - libapache2-mod-php
  - php-gd
  - php-json
  - php-mysql
  - php-curl
  - php-mbstring
  - php-intl
  - php-imagick
  - php-xml
  - php-zip
runcmd:
  - echo "OwnCloud dependencies installed" >> /var/log/role-owncloud.log
EOF
            ;;
        bare)
            echo "runcmd:"
            echo "  - echo 'Bare container ready' >> /var/log/role-bare.log"
            ;;
        *)
            echo "runcmd:"
            echo "  - echo 'Unknown role: ${role}' >> /var/log/role-unknown.log"
            ;;
    esac
}

# Create temporary file for user-data
USER_DATA_FILE=$(mktemp)
generate_user_data "$ROLE" > "$USER_DATA_FILE"

# 2. Create the container (Network and basic config set here)
echo "==> Creating container..."
pct create "$CT_ID" "$TEMPLATE" \
    --rootfs storage1:8 \
    --memory 2048 \
    --swap 512 \
    --cores 2 \
    --hostname "$CT_NAME" \
    --net0 name=eth0,bridge="$BRIDGE",ip="$TARGET_IP"/24,gw="$GW" \
    --nameserver "$DNS" \
    --ostype debian \
    --unprivileged 0

# 3. Inject Cloud-Init Config
echo "==> Injecting cloud-init configuration..."

# A. Inject the user-data file. 
# NOTE: Setting --user-data automatically enables Cloud-Init processing on boot.
# There is NO --cienable flag for LXC containers.
pct set "$CT_ID" --user-data "$(cat "$USER_DATA_FILE")"

# B. (Optional) Set meta-data for instance ID (helps cloud-init track runs)
pct set "$CT_ID" --meta-data "instance-id: $CT_ID\nlocal-hostname: $CT_NAME"

# Cleanup
# rm -f "$USER_DATA_FILE"

# 4. Start the container
echo "==> Starting container..."
pct start "$CT_ID"
  