class Kitsune::Kit::Commands::SetupUnattended

def create

def create
  filled_options = Kitsune::Kit::OptionsBuilder.build(
    options,
    required: [:server_ip],
    defaults: Kitsune::Kit::Defaults.ssh
  )
  with_ssh_connection(filled_options) do |ssh|
    perform_setup(ssh)
  end
end

def perform_rollback(ssh)

def perform_rollback(ssh)
  output = ssh.exec! <<~EOH
    set -e
    sudo mkdir -p /usr/local/backups
    sudo chown deploy:deploy /usr/local/backups
    RESOURCE="/etc/apt/apt.conf.d/20auto-upgrades"
    BACKUP_DIR="/usr/local/backups"
    SCRIPT_ID="setup_unattended"
    BACKUP_FILE="${BACKUP_DIR}/${SCRIPT_ID}.before"
    MARKER_FILE="${BACKUP_DIR}/${SCRIPT_ID}.after"
    if [ -f "$MARKER_FILE" ]; then
      echo "🔁 Restoring original auto-upgrades config…"
      sudo mv "$BACKUP_FILE" "$RESOURCE" && echo "   - config restored from $BACKUP_FILE"
      sudo rm -f "$MARKER_FILE" && echo "   - marker $MARKER_FILE removed"
    else
      echo "   - no marker for $SCRIPT_ID, skipping restore"
    fi
    echo "✍🏻 Stopping & disabling unattended-upgrades…"
    sudo systemctl --quiet stop unattended-upgrades.service apt-daily.timer apt-daily-upgrade.timer && echo "   - services stopped"
    sudo systemctl --quiet disable unattended-upgrades.service && echo "   - service disabled"
  EOH
  say output
  say "✅ Unattended-upgrades rollback completed", :green
end

def perform_setup(ssh)

def perform_setup(ssh)
  output = ssh.exec! <<~EOH
    set -e
    sudo mkdir -p /usr/local/backups
    sudo chown deploy:deploy /usr/local/backups
    RESOURCE="/etc/apt/apt.conf.d/20auto-upgrades"
    BACKUP_DIR="/usr/local/backups"
    SCRIPT_ID="setup_unattended"
    BACKUP_FILE="${BACKUP_DIR}/${SCRIPT_ID}.before"
    MARKER_FILE="${BACKUP_DIR}/${SCRIPT_ID}.after"
    echo "✍🏻 Installing required packages…"
    if ! dpkg -l | grep -q "^ii\\s*unattended-upgrades"; then
      sudo apt-get update -y
      sudo apt-get install -y unattended-upgrades apt-listchanges && echo "   - packages installed"
    else
      echo "   - unattended-upgrades already installed"
    fi
    if [ ! -f "$MARKER_FILE" ]; then
      echo "✍🏻 Backing up existing config…"
      sudo cp "$RESOURCE" "$BACKUP_FILE" && echo "   - backup saved to $BACKUP_FILE"
      sudo touch "$MARKER_FILE" && echo "   - marker created at $MARKER_FILE"
    else
      echo "   - backup & marker already exist"
    fi
    echo "✍🏻 Applying new auto-upgrades config…"
    sudo tee "$RESOURCE" > /dev/null <<UPGR
dic::Update-Package-Lists "1";
dic::Download-Upgradeable-Packages "1";
dic::AutocleanInterval "7";
dic::Unattended-Upgrade "1";
    echo "   - config applied"
    echo "✍🏻 Enabling & restarting unattended-upgrades…"
    sudo systemctl --quiet enable unattended-upgrades.service >/dev/null 2>&1 && echo "   - service enabled"
    sudo systemctl --quiet restart unattended-upgrades.service && echo "   - service restarted"
  EOH
  say output
  say "✅ Unattended-upgrades setup completed", :green
end

def rollback

def rollback
  filled_options = Kitsune::Kit::OptionsBuilder.build(
    options,
    required: [:server_ip],
    defaults: Kitsune::Kit::Defaults.ssh
  )
  with_ssh_connection(filled_options) do |ssh|
    perform_rollback(ssh)
  end
end

def with_ssh_connection(filled_options)

def with_ssh_connection(filled_options)
  server = filled_options[:server_ip]
  port   = filled_options[:ssh_port]
  key    = File.expand_path(filled_options[:ssh_key_path])
  say "🔑 Connecting as deploy@#{server}:#{port}", :green
  Net::SSH.start(server, "deploy", port: port, keys: [key], non_interactive: true, timeout: 5) do |ssh|
    yield ssh
  end
end