#!/usr/bin/env bash

# Очистка экрана
clear

# Get terminal size
rows=$(tput lines)
cols=$(tput cols)

# Функция для печати пробелов
print_spaces() {
    for ((space=0; space<$1; space++)); do
        echo -n " "
    done
}

# Функция печати листов с периодически мигающими лампочками
print_leaves() {
    for ((leaf=0; leaf<$1; leaf++)); do
        # Случайным образом решите напечатать лист или лампочку
        if (( RANDOM % 20 < 2 )); then  # Отрегулируйте частоту освещения здесь
            # Случайным образом выберите цвет мигающего огонька
            case $(( RANDOM % 4 )) in
                0) echo -n -e "\e[5;35mo\e[0m" ;;  # Мигающий розовый
                1) echo -n -e "\e[5;34mo\e[0m" ;;  # Мигающий синий
		2) echo -n -e "\e[5;33mo\e[0m" ;;  # Мигающий желтый
		3) echo -n -e "\e[5;37mo\e[0m" ;;  # Мигающий белый
            esac
        else
            echo -n -e "\e[32m*\e[0m"  # Зеленый цвет в for *
        fi
    done
}

# Функция печати ствола
print_trunk() {
    local trunk_width=${#1}
    local center=$((size - trunk_width / 2))
    print_spaces $center
    echo -e "\e[33m$1\e[0m"  # Коричневый цвет для ствола
}

# Функция для печати дерева
print_tree() {
    # Размер дерева
    size=10

    # Вычислите начальную строку и столбец
    start_row=$(( (rows - size - 10) / 2 ))
    start_col=$(( (cols - 2 * size) / 2 ))

    # Цикл для печати дерева
    for ((i=1; i<=$size; i++)); do
        tput cup $((start_row + i)) $start_col
        print_spaces $((size-i))
        print_leaves $((2*i-1))
        echo
    done

    # Распечатка ствола
    trunk="HMH"
    for ((i=0; i<3; i++)); do
        tput cup $((start_row + size + i + 1)) $start_col
        print_trunk $trunk
    done
}

# Функция для печати сообщений
print_messages() {
    local message1="MERRY CHRISTMAS"
    local message2="HAPPY NEW YEAR 2025"
    local start_row1=$((start_row + size + 5))
    local start_row2=$((start_row1 + 1))
    local col1=$(( (cols - ${#message1}) / 2 ))
    local col2=$(( (cols - ${#message2}) / 2 ))

    # Распечатать первое сообщение
    for ((i=0; i<=${#message1}; i++)); do
        tput cup $start_row1 $col1
        echo -e "\e[1;36m${message1:0:i}\e[0m"
        sleep 0.2
    done

    # Распечатать второе сообщение
    for ((i=0; i<=${#message2}; i++)); do
        tput cup $start_row2 $col2
        echo -e "\e[1;36m${message2:0:i}\e[0m"
        sleep 0.2
    done
}

# Распечатайте инструкции по выходу
print_exit_instructions() {
    tput cup $((rows - 2)) 0
    echo -e "\e[1;31mPress Ctrl+C to exit\e[0m"
}

# Основной цикл для постоянного обновления дерева и отображения сообщений
while true; do
    print_tree
    print_exit_instructions
    print_messages
    sleep 0.2  # Сделайте паузу после отображения всех сообщений
done