package main

import (
	"fmt"
	"os"
	"os/signal"
	"syscall"
	"time"

	"github.com/meowrain/nodeprobe/internal/netstat"
)

func main() {
	// 1. 获取初始数据
	prevStats, err := netstat.GetInterfaceStats()
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %v\n", err)
		os.Exit(1)
	}

	if len(prevStats) == 0 {
		fmt.Println("No network interfaces found")
		os.Exit(1)
	}

	// 2. 设置刷新间隔（默认 1 秒）
	interval := 1 * time.Second

	// 3. 打印表头
	printHeader()

	// 4. 创建 ticker 定时器
	ticker := time.NewTicker(interval)
	defer ticker.Stop()

	// 5. 监听 Ctrl+C 退出
	sigChan := make(chan os.Signal, 1)
	signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)

	// 6. 主循环
	for {
		select {
		case <-ticker.C:
			// 获取当前统计数据
			currStats, err := netstat.GetInterfaceStats()
			if err != nil {
				continue
			}

			// 计算速率
			rates := netstat.CalculateRate(prevStats, currStats, interval)

			// 打印一行统计
			printStats(rates, currStats)

			// 更新上一次的数据
			prevStats = currStats

		case <-sigChan:
			fmt.Println("\nExiting...")
			return
		}
	}
}

func printHeader() {
	fmt.Println("Network Interface Traffic Monitor")
	fmt.Println("----------------------------------")
	fmt.Printf("%-10s %15s %15s %15s %15s\n",
		"Interface", "RX Rate", "TX Rate", "RX Total", "TX Total")
	fmt.Println("----------------------------------")
}

func printStats(rates []netstat.TrafficRate, stats []netstat.InterfaceStats) {
	// 创建统计 map
	statsMap := make(map[string]netstat.InterfaceStats)
	for _, s := range stats {
		statsMap[s.Name] = s
	}

	for _, r := range rates {
		s := statsMap[r.Name]
		fmt.Printf("%-10s %15s %15s %15s %15s\n",
			r.Name,
			netstat.FormatBps(r.RxKbps*1000),
			netstat.FormatBps(r.TxKbps*1000),
			netstat.FormatBytes(float64(s.RxBytes)),
			netstat.FormatBytes(float64(s.TxBytes)),
		)
	}
	fmt.Println()
}
