#!/usr/bin/env bash
# ASCII艺术时钟

set -euo pipefail

# ASCII艺术数字
declare -a ASCII_DIGITS=(
"  ___  
 / _ \\ 
| | | |
| | | |
| |_| |
 \___/ "  # 0

"  _ 
 / |
| |
| |
| |
|_|"  # 1

"  ___  
|__  \\ 
   ) |
  / / 
 / /_ 
|____|"  # 2

"  ____ 
 |___ \\ 
   __) |
  / __/ 
 |_____|
       "  # 3

"  _  _   
 | || |  
 | || |_ 
 |__   _|
    | |  
    |_|  "  # 4

"  _____ 
 | ____| 
 | |__   
 |___ \\ 
  ___) |
 |____/ "  # 5

"    __  
   / /  
  / /_  
 |  _ \\ 
 | |_) |
 |____/ "  # 6

"  _____ 
 |___  | 
    / / 
   / /  
  / /   
 /_/    "  # 7

"   ___  
  ( _ )  
  / _ \\ 
 | (_) |
  \___/ "  # 8

"   ___  
  / _ \\ 
 | (_) |
  \__, |
    / / 
   /_/  "  # 9

"    
     
  () 
     
  () 
     "  # 冒号
)

# 彩虹颜色
RAINBOW=(
    "\033[38;5;196m" "\033[38;5;202m" "\033[38;5;208m" "\033[38;5;214m"
    "\033[38;5;220m" "\033[38;5;226m" "\033[38;5;190m" "\033[38;5;154m"
    "\033[38;5;118m" "\033[38;5;82m"  "\033[38;5;46m"  "\033[38;5;47m"
    "\033[38;5;48m"  "\033[38;5;49m"  "\033[38;5;50m"  "\033[38;5;51m"
    "\033[38;5;45m"  "\033[38;5;39m"  "\033[38;5;33m"  "\033[38;5;27m"
    "\033[38;5;21m"  "\033[38;5;57m"  "\033[38;5;93m"  "\033[38;5;129m"
    "\033[38;5;165m" "\033[38;5;201m" "\033[38;5;200m" "\033[38;5;199m"
)

RESET="\033[0m"
BOLD="\033[1m"

# 获取ASCII数字行
get_ascii_line() {
    local digit="$1"
    local line="$2"
    
    if [[ "$digit" == ":" ]]; then
        digit=10
    fi
    
    local ascii_digit="${ASCII_DIGITS[$digit]}"
    local lines=()
    IFS=$'\n' read -r -d '' -a lines <<< "$ascii_digit"
    
    if [[ $line -lt ${#lines[@]} ]]; then
        echo "${lines[$line]}"
    else
        echo ""
    fi
}

# 绘制ASCII时间
draw_ascii_time() {
    local time_str="$1"
    
    # 每数字6行高
    for line in {0..5}; do
        local output=""
        for ((i=0; i<${#time_str}; i++)); do
            local char="${time_str:$i:1}"
            local ascii_line
            ascii_line=$(get_ascii_line "$char" "$line")
            
            # 添加颜色
            local color_idx=$(( (i + line) % ${#RAINBOW[@]} ))
            output+="${RAINBOW[$color_idx]}${ascii_line}  ${RESET}"
        done
        echo -e "  $output"
    done
}

# 主显示
show_display() {
    clear
    
    # 获取时间
    local hour minute second
    hour=$(date +%H)
    minute=$(date +%M)
    second=$(date +%S)
    
    local time_str="${hour}:${minute}:${second}"
    
    # 标题
    echo -e "\n${BOLD}══════════════════════════════════════════════════════${RESET}"
    echo -e "${BOLD}巡光网艺术时钟v0.1${RESET}"
    echo -e "${BOLD}作者：巡光和他的ai助手${RESET}"
    echo -e "${BOLD}网站网站：巡光网（http://xgwa.rf.gd/）${RESET}"
    echo -e "${BOLD}首次分享时间：2026-01-03晚，精准时间请查看首次发布处的发布时间。${RESET}"
    echo -e "${BOLD}如果你下载了此代码请声明来自巡光网（http://xgwa.rf.gd/）作者巡光和他的ai助手${RESET}"
    echo -e "${BOLD}══════════════════════════════════════════════════════${RESET}\n"
    
    # 绘制时间
    echo -e "${BOLD}当前时间:${RESET}\n"
    draw_ascii_time "$time_str"
    echo
    
    # 绘制装饰
    draw_decoration
    
    # 显示日期
    local date_str weekday
    date_str=$(date "+%Y-%m-%d")
    weekday=$(date "+%A")
    
    echo -e "\n${BOLD}📅 ${date_str} (${weekday})${RESET}"
    
    # 数字表盘
    draw_digital_clock "$hour" "$minute" "$second"
    
    echo -e "\n${BOLD}══════════════════════════════════════════════════════${RESET}"
    echo -e "${BOLD}            实时更新 | 按 Ctrl+C 退出               ${RESET}"
}

# 绘制装饰
draw_decoration() {
    local width=50
    local second
    second=$(date +%S)
    
    echo -n "  "
    for ((i=0; i<width; i++)); do
        local pos=$(( (i + second) % width ))
        local char
        if [[ $((RANDOM % 3)) -eq 0 ]]; then
            char="✨"
        elif [[ $((RANDOM % 2)) -eq 0 ]]; then
            char="●"
        else
            char="○"
        fi
        
        local color_idx=$(( (i + second) % ${#RAINBOW[@]} ))
        echo -ne "${RAINBOW[$color_idx]}${char}${RESET}"
    done
    echo
}

# 绘制数字表盘
draw_digital_clock() {
    local hour="$1"
    local minute="$2"
    local second="$3"
    
    echo -e "\n${BOLD}数字表盘:${RESET}"
    echo
    echo -e "    ┌─────────────────────────────────────┐"
    echo -e "    │  🕐  时: ${BOLD}$(printf "%02d" "$hour")${RESET}  │ 分: ${BOLD}$(printf "%02d" "$minute")${RESET}  │ 秒: ${BOLD}$(printf "%02d" "$second")${RESET}  🕐  │"
    echo -e "    └─────────────────────────────────────┘"
}

# 主循环
main() {
    # 隐藏光标
    printf "\033[?25l"
    
    # 清理函数
    trap 'printf "\033[?25h${RESET}\n"; exit' INT TERM EXIT
    
    # 初始显示
    clear
    echo -e "\n${BOLD}启动巡光网艺术时钟v0.1中...${RESET}"
    echo -e "\n${BOLD}⇩                    ⇩                    ⇩                    ⇩${RESET}"
    echo -e "${BOLD}巡光网艺术时钟v0.1${RESET}"
    echo -e "${BOLD}作者：巡光和他的ai助手${RESET}"
    echo -e "${BOLD}网站网站：巡光网（http://xgwa.rf.gd/）${RESET}"
    echo -e "${BOLD}首次分享时间：2026-01-03晚，精准时间请查看首次发布处的发布时间。${RESET}"
    echo -e "${BOLD}如果你下载了此代码请声明来自巡光网（http://xgwa.rf.gd/）作者巡光和他的ai助手${RESET}"
    # 时间（秒丨巡光解释，可能不对）
    sleep 10
    
    # 主循环
    while true; do
        show_display
        sleep 1
    done
}

# 运行
main "$@"