package startup

import (
	"fmt"
	"runtime"
	"time"

	"bindbox-game/configs"
	"bindbox-game/internal/pkg/env"

	"github.com/common-nighthawk/go-figure"
	"github.com/fatih/color"
)

type status struct {
	CustomerProjectNameZh  string `json:"customer_project_name_zh"`
	CustomerProjectNameEn  string `json:"customer_project_name_en"`
	CustomerProjectVersion string `json:"customer_project_version"`
	ProjectPort            string `json:"project_port"`
	ProjectEnv             string `json:"project_env"`
	RuntimeVersion         string `json:"runtime_version"`
	Now                    string `json:"now"`
}

func PrintInfo() {
	// 创建 ASCII 艺术标题
	fmt.Println()
	myFigure := figure.NewColorFigure(configs.CustomerProjectNameEn, "", "green", true)
	myFigure.Print()

	// 项目信息
	green := color.New(color.FgGreen).Add(color.Bold)
	green.Printf("▌ 客户项目: %s\n", configs.CustomerProjectNameZh)
	green.Printf("▌ 项目版本: %s\n", configs.CustomerProjectVersion)
	green.Printf("▌ 启动时间: %s\n", time.Now().Format("2006-01-02 15:04:05"))
	green.Printf("▌ 运行环境: %s %s\n", runtime.GOOS, runtime.Version())
	green.Printf("▌ 服务端口: [%s]\n", configs.ProjectPort)
	green.Printf("▌ 服务配置: [%s]\n", env.Active().Value())

	// 服务状态
	fmt.Println()
	yellow := color.New(color.FgYellow).Add(color.Bold)
	yellow.Printf("▌ 数据库连接: ✔ 已建立\n")

	fmt.Println()
}

func Info() *status {
	return &status{
		CustomerProjectNameZh:  configs.CustomerProjectNameZh,
		CustomerProjectNameEn:  configs.CustomerProjectNameEn,
		CustomerProjectVersion: configs.CustomerProjectVersion,
		ProjectPort:            configs.ProjectPort,
		ProjectEnv:             env.Active().Value(),
		RuntimeVersion:         fmt.Sprintf("%s %s", runtime.GOOS, runtime.Version()),
		Now:                    time.Now().Format("2006-01-02 15:04:05"),
	}
}
