package telegram

import (
	"fmt"
	"strconv"
	"strings"

	tele "gopkg.in/telebot.v3"
)

func (b *Bot) handleAdminAdd(c tele.Context) error {
	payload := strings.TrimSpace(c.Message().Payload)
	if payload == "" {
		return c.Reply("用法: /admin_add <用户ID>")
	}

	userID, err := strconv.ParseInt(payload, 10, 64)
	if err != nil {
		return c.Reply("❌ 无效的用户ID")
	}

	// 检查是否已是管理员
	if b.isAdmin(userID) {
		return c.Reply("⚠️ 该用户已是管理员")
	}

	if err := b.storage.AddAdmin(userID); err != nil {
		return c.Reply(fmt.Sprintf("❌ 添加失败: %v", err))
	}

	return c.Reply(fmt.Sprintf("✅ 已添加管理员: %d", userID))
}

func (b *Bot) handleAdminDel(c tele.Context) error {
	payload := strings.TrimSpace(c.Message().Payload)
	if payload == "" {
		return c.Reply("用法: /admin_del <用户ID>")
	}

	userID, err := strconv.ParseInt(payload, 10, 64)
	if err != nil {
		return c.Reply("❌ 无效的用户ID")
	}

	// 不能删除超级管理员
	if b.cfg.IsSuperAdmin(userID) {
		return c.Reply("❌ 无法删除超级管理员（配置文件中的管理员）")
	}

	if err := b.storage.RemoveAdmin(userID); err != nil {
		return c.Reply(fmt.Sprintf("❌ 删除失败: %v", err))
	}

	return c.Reply(fmt.Sprintf("✅ 已移除管理员: %d", userID))
}

func (b *Bot) handleAdminList(c tele.Context) error {
	// 配置文件中的超级管理员
	superAdmins := b.cfg.Admins

	// 数据库中的动态管理员
	dbAdmins, err := b.storage.ListAdmins()
	if err != nil {
		return c.Reply(fmt.Sprintf("❌ 获取管理员列表失败: %v", err))
	}

	var sb strings.Builder
	sb.WriteString("👑 **管理员列表**\n\n")

	sb.WriteString("**超级管理员（配置文件）:**\n")
	if len(superAdmins) == 0 {
		sb.WriteString("  _无_\n")
	} else {
		for _, id := range superAdmins {
			sb.WriteString(fmt.Sprintf("  • `%d`\n", id))
		}
	}

	sb.WriteString("\n**动态管理员（数据库）:**\n")
	if len(dbAdmins) == 0 {
		sb.WriteString("  _无_\n")
	} else {
		for _, id := range dbAdmins {
			sb.WriteString(fmt.Sprintf("  • `%d`\n", id))
		}
	}

	return c.Reply(sb.String(), tele.ModeMarkdown)
}
