package main

import (
	"flag"
	"fmt"
	"os"
	"strings"

	// 注：以下插件均可通过前面加 // 注释，注释后停用并不加载插件
	// 下列插件可与 wdvxdr1123/ZeroBot v1.1.2 以上配合单独使用

	// 插件控制
	// webctrl "github.com/FloatTech/ZeroBot-Plugin/control/web" // web 后端控制

	// 词库类
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_atri"      // ATRI词库
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_chat"      // 基础词库
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_qingyunke" // 青云客

	// 实用类
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_b14"          // base16384加解密
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_github"       // 搜索GitHub仓库
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_manager"      // 群管
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_nbnhhsh"      // 拼音首字母缩写释义工具
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_runcode"      // 在线运行代码
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_sleep_manage" // 统计睡眠时间
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_translation"  // 翻译

	// 娱乐类
	// _ "github.com/FloatTech/ZeroBot-Plugin/plugin_wtf"    // 鬼东西
	_ "github.com/FloatTech/ZeroBot-Plugin-Gif"                 // 制图
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_ai_false"     // 服务器监控
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_book_review"  // 哀伤雪刃吧推书记录
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_choose"       // 选择困难症帮手
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_chouxianghua" // 说抽象话
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_coser"        // 三次元小姐姐
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_fortune"      // 运势
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_funny"        // 笑话
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_hs"           // 炉石
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_minecraft"    // MCSManager
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_moyu"         // 摸鱼
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_music"        // 点歌
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_novel"        // 铅笔小说网搜索
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_omikuji"      // 浅草寺求签
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_reborn"       // 投胎
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_shadiao"      // 沙雕app
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_shindan"      // 测定

	// b站相关
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili" // 查询b站用户信息
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_diana"    // 嘉心糖发病

	// 二次元图片
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_acgimage"      // 随机图片与AI点评
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_aiwife"        // 随机老婆
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_image_finder"  // 关键字搜图
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_lolicon"       // lolicon 随机图片
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_nativesetu"    // 本地涩图
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_nativewife"    // 本地老婆
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_saucenao"      // 以图搜图
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_setutime"      // 来份涩图
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_tracemoe"      // 搜番
	_ "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation" // vtb语录

	// 以下为内置依赖，勿动
	"github.com/fumiama/go-registry"
	"github.com/sirupsen/logrus"
	zero "github.com/wdvxdr1123/ZeroBot"
	"github.com/wdvxdr1123/ZeroBot/driver"
	"github.com/wdvxdr1123/ZeroBot/message"
)

var (
	contents = []string{
		"* OneBot + ZeroBot + Golang",
		"* Version 1.2.2 - 2021-12-13 21:22:45 +0800 CST",
		"* Copyright © 2020 - 2021 FloatTech. All Rights Reserved.",
		"* Project: https://github.com/FloatTech/ZeroBot-Plugin",
	}
	banner = strings.Join(contents, "\n")
	token  *string
	url    *string
	reg    = registry.NewRegReader("reilia.eastasia.azurecontainer.io:32664", "fumiama")
)

func init() {
	// 解析命令行参数
	d := flag.Bool("d", false, "Enable debug level log and higher.")
	w := flag.Bool("w", false, "Enable warning level log and higher.")
	h := flag.Bool("h", false, "Display this help.")
	// 解析命令行参数，输入 `-g 监听地址:端口` 指定 gui 访问地址，默认 127.0.0.1:3000
	// g := flag.String("g", "127.0.0.1:3000", "Set web gui listening address.")

	// 直接写死 AccessToken 时，请更改下面第二个参数
	token = flag.String("t", "", "Set AccessToken of WSClient.")
	// 直接写死 URL 时，请更改下面第二个参数
	url = flag.String("u", "ws://127.0.0.1:6700", "Set Url of WSClient.")

	flag.Parse()
	if *h {
		printBanner()
		fmt.Println("Usage:")
		flag.PrintDefaults()
		os.Exit(0)
	} else {
		if *d && !*w {
			logrus.SetLevel(logrus.DebugLevel)
		}
		if *w {
			logrus.SetLevel(logrus.WarnLevel)
		}
	}
	// 启用 gui
	// webctrl.InitGui(*g)
}

func printBanner() {
	fmt.Print(
		"\n======================[ZeroBot-Plugin]======================",
		"\n", banner, "\n",
		"----------------------[ZeroBot-公告栏]----------------------",
		"\n", getKanban(), "\n",
		"============================================================\n",
	)
}

func getKanban() string {
	err := reg.Connect()
	defer reg.Close()
	if err != nil {
		return err.Error()
	}
	text, err := reg.Get("ZeroBot-Plugin/kanban")
	if err != nil {
		return err.Error()
	}
	return text
}

func main() {
	printBanner()
	// 帮助
	zero.OnFullMatchGroup([]string{"/help", ".help", "菜单"}, zero.OnlyToMe).SetBlock(true).FirstPriority().
		Handle(func(ctx *zero.Ctx) {
			ctx.SendChain(message.Text(banner, "\n可发送\"/服务列表\"查看 bot 功能"))
		})
	zero.OnFullMatch("查看zbp公告", zero.OnlyToMe, zero.AdminPermission).SetBlock(true).FirstPriority().
		Handle(func(ctx *zero.Ctx) {
			ctx.SendChain(message.Text(getKanban()))
		})
	zero.RunAndBlock(
		zero.Config{
			NickName:      []string{"椛椛", "ATRI", "atri", "亚托莉", "アトリ"},
			CommandPrefix: "/",
			// SuperUsers 某些功能需要主人权限，可通过以下两种方式修改
			// "12345678", "87654321"：通过代码写死的方式添加主人账号
			// flag.Args()：通过命令行参数的方式添加主人账号，无需修改下方任何代码
			SuperUsers: append([]string{"12345678", "87654321"}, flag.Args()...),
			Driver:     []zero.Driver{driver.NewWebSocketClient(*url, *token)},
		},
	)
}
