#!/usr/bin/env bash

set -e

##############################################
# Foroney Bootstrap
##############################################

VERSION="0.1"

RED="\e[31m"
GREEN="\e[32m"
YELLOW="\e[33m"
BLUE="\e[34m"
CYAN="\e[36m"
RESET="\e[0m"

LOG="/var/log/foroney-bootstrap.log"

exec > >(tee -a "$LOG") 2>&1

##############################################

step() {
    echo -e "${BLUE}==>${RESET} $1"
}

success() {
    echo -e "${GREEN}✔${RESET} $1"
}

warn() {
    echo -e "${YELLOW}!${RESET} $1"
}

error() {
    echo -e "${RED}✘${RESET} $1"
}

##############################################

if [[ $EUID -ne 0 ]]; then
    error "Запустите скрипт через sudo."
    exit 1
fi

clear

echo -e "${CYAN}"
echo "=============================================="
echo "        Foroney Bootstrap ${VERSION}"
echo "=============================================="
echo -e "${RESET}"

##############################################
# Hostname
##############################################

read -rp "Hostname: " HOSTNAME

hostnamectl set-hostname "$HOSTNAME"

##############################################
# Update
##############################################

step "Updating system..."

apt update
apt full-upgrade -y
apt autoremove -y
apt autoclean

success "System updated"

##############################################
# Packages
##############################################

step "Installing packages..."

apt install -y \
curl \
wget \
git \
nano \
vim \
htop \
btop \
tree \
jq \
zip \
unzip \
dnsutils \
net-tools \
iproute2 \
tcpdump \
lsof \
ca-certificates \
software-properties-common \
ufw \
openssl \
socat

success "Packages installed"

##############################################
# Docker
##############################################

step "Installing Docker..."

curl -fsSL https://get.docker.com | sh

systemctl enable docker
systemctl start docker

success "Docker installed"

##############################################
# Directories
##############################################

step "Creating directories..."

mkdir -p /opt/compose
mkdir -p /opt/backups
mkdir -p /opt/scripts
mkdir -p /opt/certs
mkdir -p /opt/logs
mkdir -p /opt/data

success "Directories created"

##############################################
# sysctl
##############################################

step "Configuring sysctl..."

cat >/etc/sysctl.d/99-foroney.conf <<EOF
vm.max_map_count=262144
fs.file-max=2097152

net.core.somaxconn=65535

net.ipv4.tcp_syncookies=1
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.all.accept_source_route=0
EOF

sysctl --system

success "sysctl configured"

##############################################
# limits
##############################################

step "Configuring limits..."

cat >/etc/security/limits.d/99-foroney.conf <<EOF
* soft nofile 1048576
* hard nofile 1048576
root soft nofile 1048576
root hard nofile 1048576
EOF

success "limits configured"

##############################################
# Firewall
##############################################

step "Configuring UFW..."

ufw --force reset

ufw default deny incoming
ufw default allow outgoing

# SSH через Tailscale
ufw allow in on tailscale0 to any port 22 proto tcp

ufw logging medium

ufw --force enable

success "Firewall configured"

##############################################
# Bash aliases
##############################################

step "Installing aliases..."

cat >>/etc/bash.bashrc <<EOF

alias ll='ls -lah'
alias update='apt update && apt upgrade -y'
alias dps='docker ps'
alias dc='docker compose'
alias cls='clear'

EOF

success "Aliases installed"

##############################################
# Clean
##############################################

step "Cleaning..."

apt autoremove -y
apt autoclean

##############################################
# Finish
##############################################

echo
echo "=============================================="
echo

success "Bootstrap completed"

echo
echo "Hostname : $(hostname)"
echo "Docker   : $(docker --version)"
echo

echo "Directories:"
echo "  /opt/compose"
echo "  /opt/backups"
echo "  /opt/scripts"
echo "  /opt/certs"
echo "  /opt/logs"

echo
echo "=============================================="