#!/bin/bash

set -e

# Цвета для вывода
ANSI_RED='\033[0;31m'
ANSI_GREEN='\033[0;32m'
ANSI_YELLOW='\033[1;33m'
ANSI_RESET='\033[0m'

# Проверка, что скрипт запущен от root
if [ "$EUID" -ne 0 ]; then
    echo -e "${ANSI_RED}Ошибка: скрипт должен запускаться от root${ANSI_RESET}"
    exit 1
fi

echo -e "${ANSI_GREEN}=== Настройка системы ===${ANSI_RESET}"

# Запрос имени хоста
echo -e "${ANSI_YELLOW}Введите новое имя хоста:${ANSI_RESET}"
read -p "Hostname: " NEW_HOSTNAME
if [ -z "$NEW_HOSTNAME" ]; then
    echo -e "${ANSI_RED}Имя хоста не может быть пустым.${ANSI_RESET}"
    exit 1
fi

# Запрос имени пользователя
echo -e "${ANSI_YELLOW}Введите имя нового пользователя:${ANSI_RESET}"
read -p "Username: " NEW_USER
if [ -z "$NEW_USER" ]; then
    echo -e "${ANSI_RED}Имя пользователя не может быть пустым.${ANSI_RESET}"
    exit 1
fi

# Запрос пароля для нового пользователя
echo -e "${ANSI_YELLOW}Введите пароль для пользователя $NEW_USER:${ANSI_RESET}"
read -s -p "Password: " USER_PASS
echo
if [ -z "$USER_PASS" ]; then
    echo -e "${ANSI_RED}Пароль не может быть пустым.${ANSI_RESET}"
    exit 1
fi

echo -e "\n${ANSI_GREEN}=== Установка имени хоста: $NEW_HOSTNAME ===${ANSI_RESET}"
hostnamectl set-hostname "$NEW_HOSTNAME"
# Обновление /etc/hosts
sed -i "s/^127.0.1.1.*/127.0.1.1\t$NEW_HOSTNAME/" /etc/hosts
echo -e "${ANSI_GREEN}Имя хоста установлено.${ANSI_RESET}"

# Функция добавления репозитория MEPHI
add_mephi_repository() {
    # Определение версии Debian
    . /etc/os-release 2>/dev/null || { echo "Failed to determine release"; exit 1; }
    [ -z "$VERSION_CODENAME" ] && echo "VERSION_CODENAME not found" && exit 1

    local conf_file="/etc/apt/sources.list.d/debian_mephi.list"

    if grep -qs "mirror.mephi.ru.*$VERSION_CODENAME" "$conf_file" 2>/dev/null; then
        echo -e "Repository for $VERSION_CODENAME already exists in $conf_file"
    else
        echo -e "Adding repository for Debian $VERSION_CODENAME"
        cat >> "$conf_file" << EOF

# Added $(date '+%Y-%m-%d')
deb http://mirror.mephi.ru/debian/ $VERSION_CODENAME main non-free-firmware
deb-src http://mirror.mephi.ru/debian/ $VERSION_CODENAME main non-free-firmware
EOF
        echo "Repository added, updating package list..."
        apt update
    fi
}

# Добавляем репозиторий MEPHI
add_mephi_repository

# Обновление и апгрейд
apt -y upgrade

# Установка пакетов (включая sudo)
PACKAGES=(
    pv nano curl wget sudo lsb-release iptables
    unzip pigz zstd
    ncdu gdu
    screen tmux lynx
    htop btop iftop mtr ioping
    git jq yq pwgen
    bind9-dnsutils net-tools ssh-audit
    cloud-guest-utils qemu-guest-agent
    console-setup
)

echo -e "${ANSI_GREEN}Installing packages...${ANSI_RESET}"
apt-get update
apt-get install -y "${PACKAGES[@]}"

# Настройка SSH
echo -e "${ANSI_GREEN}Allowing SSH root login${ANSI_RESET}"
sed -i 's/^.*PermitRootLogin.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
systemctl restart sshd
echo -e "${ANSI_GREEN}Ok.${ANSI_RESET}"

# Midnight Commander
apt-get -y install mc

# Настройка таймзоны и локали
echo "tzdata tzdata/Areas select Europe" | debconf-set-selections
echo "tzdata tzdata/Zones/Europe select Moscow" | debconf-set-selections
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure tzdata

cat > /etc/locale.gen << EOF
ru_RU.UTF-8 UTF-8
en_US.UTF-8 UTF-8
EOF

locale-gen
update-locale LANG=en_US.UTF-8
locale -a | grep -E "en_US|ru_RU"
source /etc/default/locale

dpkg-reconfigure console-setup
dpkg-reconfigure keyboard-configuration

# Настройка journald
mkdir -p /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/size.conf << EOF
[Journal]
SystemMaxUse=1G
SystemMaxFileSize=50M
MaxLevelStore=warning
EOF

systemctl restart systemd-journald

# Создание пользователя
useradd -m "$NEW_USER" && echo "$NEW_USER:$USER_PASS" | chpasswd && passwd -e "$NEW_USER"
usermod -aG sudo "$NEW_USER"

# Настройка .Xauthority
touch "/home/$NEW_USER/.Xauthority"
chown "$NEW_USER:$NEW_USER" "/home/$NEW_USER/.Xauthority"

echo -e "${ANSI_GREEN}Пользователь $NEW_USER с паролем '${ANSI_YELLOW}$USER_PASS${ANSI_GREEN}' создан${ANSI_RESET}"

# Настройка истории для пользователя
cat >> "/home/$NEW_USER/.bashrc" << 'EOF'
export HISTSIZE=10000
export HISTFILESIZE=50000
export HISTTIMEFORMAT="%F %T  "
export HISTCONTROL=ignoredups:ignorespace
shopt -s histappend
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
EOF

chown "$NEW_USER:$NEW_USER" "/home/$NEW_USER/.bashrc"

# Удаление документации git
rm -rf /usr/share/doc/git/RelNotes

# Настройка истории для root
cat >> /root/.bashrc << 'EOF'
export HISTSIZE=10000
export HISTFILESIZE=50000
export HISTTIMEFORMAT="%F %T  "
export HISTCONTROL=ignoredups:ignorespace
shopt -s histappend
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
EOF

source /root/.bashrc

echo -e "${ANSI_GREEN}=== Настройка завершена успешно ===${ANSI_RESET}"