# Built: ООО "НАЙС СОФТ ГРУПП" 5024245440 <niceos@ncsgp.ru>
# Этот файл содержит общесистемные алиасы и функции для всех пользователей.

# Общесистемные переменные окружения и программы — в /etc/profile.
# Личные переменные и программы — в ~/.bash_profile. Личные алиасы и функции — в ~/.bashrc.

alias ls='ls --color=auto'
alias ll='ls -l'
alias la='ls -a'
alias diff='diff --color=auto'
alias grep='grep --color=auto'
alias home='cd ~'
alias rm='rm -i'

NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
if [ "$(id -u)" -eq 0 ]; then
  PS1="$RED\u@\h [ $NORMAL\w$RED ]# $NORMAL"
else
  PS1="$GREEN\u@\h [ $NORMAL\w$GREEN ]\$ $NORMAL"
fi

unset RED GREEN NORMAL

l() {
    # Выводит детальный список файлов с цветным форматированием
    ls -alhs --color=auto "$@"
}

ipinfo() {
    # Цветовые коды для оформления вывода (согласованы с sysinfo)
    local CYAN="\033[1;36m"
    local RESET="\033[0m"

    # Локальные IP-адреса, исключая Docker и виртуальные интерфейсы
    echo -e "${CYAN}Локальные IP:${RESET}"
    # Фильтруем интерфейсы: исключаем lo, docker0, br-*, veth*
    local interfaces=$(ip link show | grep '^[0-9]' | grep -v 'lo\|docker0\|br-\|veth' | awk -F': ' '{print $2}')
    if [ -n "$interfaces" ]; then
        for iface in $interfaces; do
            local ip_addr=$(ip addr show "$iface" 2>/dev/null | grep -w inet | awk '{print $2}' | cut -d'/' -f1)
            local ip6_addr=$(ip addr show "$iface" 2>/dev/null | grep -w inet6 | awk '{print $2}' | cut -d'/' -f1 | grep -v '^fe80')
            local mac_addr=$(ip link show "$iface" 2>/dev/null | awk '/ether/ {print $2}')
            local status=$(ip link show "$iface" 2>/dev/null | awk '/state/ {print $9}')
            echo -e "  Интерфейс: $iface"
            [ -n "$ip_addr" ] && echo -e "    IPv4: $ip_addr" || echo -e "    IPv4: не назначен"
            [ -n "$ip6_addr" ] && echo -e "    IPv6: $ip6_addr" || echo -e "    IPv6: не назначен"
            [ -n "$mac_addr" ] && echo -e "    MAC: $mac_addr"
            [ -n "$status" ] && echo -e "    Статус: $status"
        done
    else
        echo -e "  Нет физических сетевых интерфейсов"
    fi

    # Внешний IP через ifconfig.me
    echo -e "${CYAN}Внешний IP:${RESET}"
    local ext_ip=$(curl -s --connect-timeout 3 ifconfig.me 2>/dev/null)
    if [ -n "$ext_ip" ] && [[ "$ext_ip" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
        echo -e "  $ext_ip (через ifconfig.me)"
    else
        echo -e "  N/A (не удалось определить, проверьте подключение к интернету)"
    fi

    # DNS-серверы через systemd-resolved или /etc/resolv.conf
    echo -e "${CYAN}DNS-серверы:${RESET}"
    if command -v systemd-resolve >/dev/null 2>&1; then
        local dns_servers=$(systemd-resolve --status 2>/dev/null | grep 'DNS Servers' | awk '{print $3}' | tr '\n' ' ')
        if [ -n "$dns_servers" ]; then
            echo -e "  $dns_servers (через systemd-resolved)"
        else
            echo -e "  Не удалось получить через systemd-resolved, проверяем /etc/resolv.conf"
            local dns_servers_fallback=$(cat /etc/resolv.conf 2>/dev/null | grep '^nameserver' | awk '{print $2}' | tr '\n' ' ')
            [ -n "$dns_servers_fallback" ] && echo -e "  $dns_servers_fallback (через /etc/resolv.conf)" || echo -e "  Не заданы"
        fi
    else
        local dns_servers=$(cat /etc/resolv.conf 2>/dev/null | grep '^nameserver' | awk '{print $2}' | tr '\n' ' ')
        [ -n "$dns_servers" ] && echo -e "  $dns_servers (через /etc/resolv.conf)" || echo -e "  Не заданы"
    fi
}

sysinfo() {
    # Цветовые коды для оформления вывода
    local CYAN="\033[1;36m"
    local RESET="\033[0m"

    # Сбор информации о системе
    echo -e "${CYAN}Система:${RESET} $(uname -srvmo)"

    # Память (добавлено свободное место)
    local mem_info=$(free -h | grep Mem | awk '{print $2 " всего, " $3 " использовано, " $4 " свободно"}')
    echo -e "${CYAN}Память:${RESET} $mem_info"

    # Процессор (добавлено количество ядер и текущая частота)
    local cpu_model=$(LANG=C lscpu | grep 'Model name' | sed 's/Model name:\s*//' | tr -s ' ')
    local cpu_cores=$(nproc)
    local cpu_freq=$(cat /proc/cpuinfo | grep 'cpu MHz' | head -1 | awk '{print $4 " MHz"}')
    echo -e "${CYAN}Процессор:${RESET} $cpu_model (Ядер: $cpu_cores, $cpu_freq)"

    # Uptime (форматированный вывод)
    echo -e "${CYAN}Uptime:${RESET} $(uptime -p | sed 's/up //')"

    # Диск (общее и доступное место на корневом разделе)
    local disk_info=$(df -h / | tail -1 | awk '{print $2 " всего, " $3 " использовано, " $4 " доступно"}')
    echo -e "${CYAN}Диск (/):${RESET} $disk_info"

    # Проверка виртуализации
    local virt_type=""
    if command -v systemd-detect-virt >/dev/null 2>&1; then
        virt_type=$(systemd-detect-virt)
        if [ "$virt_type" = "none" ]; then
            echo -e "${CYAN}Виртуализация:${RESET} Физическая система"
        else
            echo -e "${CYAN}Виртуализация:${RESET} $virt_type"
            # Дополнительная информация о гипервизоре
            if [ -f /sys/hypervisor/type ]; then
                local hypervisor=$(cat /sys/hypervisor/type)
                echo -e "${CYAN}Гипервизор:${RESET} $hypervisor"
            fi
        fi
    else
        echo -e "${CYAN}Виртуализация:${RESET} Не удалось определить (требуется systemd-detect-virt)"
    fi

    # Сетевая информация (основной интерфейс и IP)
    local net_iface=$(ip link show | grep '^[0-9]' | grep -v 'lo' | awk -F': ' '{print $2}' | head -1)
    if [ -n "$net_iface" ]; then
        local ip_addr=$(ip addr show "$net_iface" 2>/dev/null | grep -w inet | awk '{print $2}' | cut -d'/' -f1)
        if [ -n "$ip_addr" ]; then
            echo -e "${CYAN}Сеть:${RESET} $net_iface ($ip_addr)"
        else
            echo -e "${CYAN}Сеть:${RESET} $net_iface (IP не назначен)"
        fi
    else
        echo -e "${CYAN}Сеть:${RESET} Нет активных сетевых интерфейсов"
    fi

    # Нагрузка системы
    local load_avg=$(uptime | awk -F'load average:' '{print $2}' | tr -d ',')
    echo -e "${CYAN}Нагрузка:${RESET} $load_avg"

    # Версия ядра и дистрибутив
    local distro=$(cat /etc/*release | grep -w PRETTY_NAME | cut -d'"' -f2)
    [ -n "$distro" ] && echo -e "${CYAN}Дистрибутив:${RESET} $distro"
}

# Обёртка для tdnf в интерактивных сессиях
if [[ $- == *i* ]]; then
    tdnf() {
        command tdnf "$@"
        local ret=$?

        if [[ "$1" == "remove" ]]; then
            hash -r
        fi

        return $ret
    }
fi
