#!/bin/bash

# Define formatting colors for readability
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Check if exactly one argument is passed
if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
    echo -e "${RED}Error: Missing or too many arguments.${NC}"
    echo -e "Usage: $0 clean | $0 backup [optional_output_file.tar.gz]"
    exit 1
fi

COMMAND=$1

case "$COMMAND" in
    clean)
        echo -e "${YELLOW}Starting system cleanup...${NC}"

        # --- Add your clean commands below this line ---
        echo "Cleaning package cache..."
        sudo apt clean
        sudo apt-get autoremove --purge -y
        echo "Cleaning logs..."
        sudo journalctl --vacuum-time=1d
        # Remove rotated logs
        sudo find /var/log -type f -name "*.gz" -delete
        # Empty logs
        sudo rm -rf /var/log/rsyslog/hosts/*
        # Empty some backups
        sudo rm -f /var/backups/alternatives.tar.*.gz /var/backups/apt.extended_states.*.gz /var/backups/dpkg.arch.*.gz /var/backups/dpkg.diversions.*.gz /var/backups/dpkg.statoverride.*.gz /var/backups/dpkg.status.*.gz
        # -----------------------------------------------

        echo -e "${GREEN}Cleanup complete!${NC}"
        ;;

    backup)
        CUSTOM_OUTPUT=$2
        TIMESTAMP=$(date +%F)

        # Set output file: use custom path if provided, otherwise default to /tmp/
        if [ -n "$CUSTOM_OUTPUT" ]; then
            BACKUP_FILE="$CUSTOM_OUTPUT"
        else
            BACKUP_FILE="/var/backups/keypme_server-${TIMESTAMP}.tar.gz"
        fi

        echo -e "${YELLOW}Starting system backup...${NC}"

        POSTGRESQL_BACKUP="/tmp/pg_all_${TIMESTAMP}.sql.gz"
        SAMBA_BACKUP_DIR="/tmp/samba_backup_${TIMESTAMP}"
        mkdir -p "SAMBA_$BACKUP_DIR"

        # Dump PostgreSQL databases directly to variable path
        echo "Dumping PostgreSQL databases..."
        sudo -u postgres pg_dumpall | gzip > "$POSTGRESQL_BACKUP"

        # Backup Samba
        if command -v samba-tool &> /dev/null; then
            sudo systemctl stop samba-ad-dc
            sudo samba-tool domain backup offline --targetdir="$SAMBA_BACKUP_DIR"
            sudo systemctl start samba-ad-dc
        fi

        # Only runs if OpenLDAP exists (which it won't on Samba AD DC)
        if command -v slapcat &> /dev/null; then
            sudo slapcat -l /tmp/openldap.ldif
        fi

        echo "Creating backup archive at $BACKUP_FILE..."
        sudo tar --exclude='/var/cache' \
                 --exclude='/var/tmp' \
                 --exclude='/var/run' \
                 --exclude='/var/lock' \
                 --exclude='/var/log' \
                 --exclude='/var/backups' \
                 --exclude='/var/lib/grafana/plugins' \
                 -czf "$BACKUP_FILE" /etc /var "$POSTGRESQL_BACKUP" "$SAMBA_BACKUP_DIR"

        # Clean up temporary DB dump file
        rm -rf "$POSTGRESQL_BACKUP" "$SAMBA_BACKUP_DIR"

        echo -e "${GREEN}Backup complete!${NC}"
        ;;

    *)
        # Catch-all for invalid commands
        echo -e "${RED}Error: Invalid command '$COMMAND'.${NC}"
        echo -e "Usage: $0 {clean|backup}"
        exit 1
        ;;
esac
