package main
import (
	"github.com/lxn/walk"
	"AD-Control/public"
)


//---------------------------------------------------------
//
//    Power
//
//---------------------------------------------------------

// 电源菜单
func menuInitPower(ni * walk.NotifyIcon){
	fa := "电源选项"
	sub := [...]string{"下班咯","关闭系统","用户注销","重启系统","取消关机计时"}
	
	// 建立空菜单
	nm,err := walk.NewMenu()
	if err != nil {
		public.PrintLog(err)
	}

	for i,buttonText := range sub{
		// 建立 子按钮
		na := walk.NewAction()
		if err := na.SetText(buttonText); err != nil {
			public.PrintLog(err)
		}

		// 为子按钮 添加事件
		switch i{
		case 0:
			na.Triggered().Attach(pWorkOff)
		case 1:
			na.Triggered().Attach(pCloseWindows)
		case 2:
			na.Triggered().Attach(pLogOffUser)
		case 3:
			na.Triggered().Attach(pRebootWindows)
		case 4:
			na.Triggered().Attach(pCancelCloseWindows)
		
		}

		// 将 子按钮 添加到 菜单
		nm.Actions().Add(na)
	}
	//将菜单添加到托盘
	sysmenu,err := ni.ContextMenu().Actions().AddMenu(nm)
	if err != nil {
		public.PrintLog(err)
	}

	// 主菜单 属性
	sysmenu.SetText(fa)
	sysmenu.SetVisible(true)
	sysmenu.SetEnabled(true)
}
// 电源管理 下班
func pWorkOff(){
	public.SendServerReport(public.Msg_Report_Offwork)
}
// 电源管理 关机
func pCloseWindows(){
	public.SendServerExec(public.Msg_Exec_CloseWindows)
}
// 电源管理 注销用户
func pLogOffUser(){
	public.SendServerExec(public.Msg_Exec_LogOffUser)

}
// 电源管理 重启主机
func pRebootWindows(){
	public.SendServerExec(public.Msg_Exec_RebootWindows)

}
// 电源管理 取消自动关机
func pCancelCloseWindows(){
	public.SendServerExec(public.Msg_Exec_CancelCloseWindows)
}


//--------------------------------------------------------------------
//
//    Software Install
//
//--------------------------------------------------------------------

// 软件安装
func menuInitSoftwareInstall(ni * walk.NotifyIcon){
	fa := "软件安装"
	// 建立空菜单
	nm,err := walk.NewMenu()
	if err != nil {
		public.PrintLog(err)
	}
	list,err := public.ReadDir(public.Env_ADSoftlike)
	if err != nil {
		public.PrintLog(err)
	}
	for _,ueach := range list{
		each := ueach.Name()
		if each == ".DS_Store"{
			continue
		}
		each_noext := public.TrimSuffix(public.TrimSuffix(ueach.Name(),".exe"),".msi")

		// 建立 子按钮
		na := walk.NewAction()
		if err := na.SetText(each_noext); err != nil {
			public.PrintLog(err)
		}

		// 为子按钮 添加事件
		na.Triggered().Attach(func() {
			siEnter_admin(each)
		})

		// 将 子按钮 添加到 菜单
		nm.Actions().Add(na)
	}
	//将菜单添加到托盘
	sysmenu,err := ni.ContextMenu().Actions().AddMenu(nm)
	if err != nil {
		public.PrintLog(err)
	}

	// 主菜单 属性
	sysmenu.SetText(fa)
	sysmenu.SetVisible(true)
	sysmenu.SetEnabled(true)
}
// 软件安装 进行安装
func siEnter_admin(softname string){
	go public.Msg("等待弹出安装窗口，请稍等。。")
	ifFile := public.Exist(`C:\windows\`+softname)
	public.SendServer(public.GJexecInstallSoftware(ifFile,softname))

}


//---------------------------------------------------------------
//
//     WxDrive Sync
//
//---------------------------------------------------------------

// 微盘同步
func menuInitWxDriveSync(ni * walk.NotifyIcon){
	fa := "微盘同步"
	sub := [...]string{"初始化","同步部门共享盘到微盘（手动）","同步部门共享盘到服务器（手动）","说明"}
	// 建立空菜单
	nm,err := walk.NewMenu()
	if err != nil {
		public.PrintLog(err)
	}

	for i,buttonText := range sub{
		// 建立 子按钮
		na := walk.NewAction()
		if err := na.SetText(buttonText); err != nil {
			public.PrintLog(err)
		}

		// 为子按钮 添加事件
		switch i{
		case 0:
			na.Triggered().Attach(wxdsInit)
		case 1:
			na.Triggered().Attach(wxdsToDrive)
		case 2:
			na.Triggered().Attach(wxdsToServer)
		case 3:
			na.Triggered().Attach(wxdsExplain)
		
		}

		// 将 子按钮 添加到 菜单
		nm.Actions().Add(na)
	}

	//将菜单添加到托盘
	sysmenu,err := ni.ContextMenu().Actions().AddMenu(nm)
	if err != nil {
		public.PrintLog(err)
	}

	// 主菜单 属性
	sysmenu.SetText(fa)
	sysmenu.SetVisible(true)
	sysmenu.SetEnabled(true)
}
// 微盘同步 初始化
func wxdsInit(){
	explain			:= "选择个人ID，请根据微盘的文件夹所在位置进行选择，确定并选择并点击文件夹（一串数字）后，点击确定继续进行下一步！具体操作方法点击说明！"
	initDir			:= public.User_Dir_WeDrive
	FullWeDrive		:= public.ChooseFolder(&explain,&initDir)
	FullWeDrive		= FullWeDrive+`\WeDrive\知微数据`
	public.PrintLog(FullWeDrive)
	if public.NotExist(FullWeDrive){
		public.Msg("不存在知微数据文件夹，请重新选择")
		return
	}
	public.Reg_Write_key_one(
		public.HKCU,
		public.Reg_Path_achome,
		public.Reg_Name_achome_dc_WeDriveDir,
		FullWeDrive)
	public.Msg("初始化完毕,请在微盘中创建文件夹（办公室部门内部共享），并分享给同事，创建后，点击开始同步即可。")
}
// 微盘同步 同步到微盘
func wxdsToDrive(){
	if public.Msg_YesNo("确定手动进行一次 -> 从共享盘同步到微盘吗？如果调整过共享盘的文件结构，请先在微盘中同步调整，否则微盘将会混沌。")==1{
		public.SendServer(public.GJexecCopyWeDrive(public.Msg_Exec_CopyWeDrive))
		public.Msg("同步完成！")

	}

}
// 微盘同步 同步到服务器
func wxdsToServer(){
	reg_Value_WeDriveDir	:= public.Reg_query_key_one(
		public.HKCU,
		public.Reg_Path_achome,
		public.Reg_Name_achome_dc_WeDriveDir)
	weDrive_Share_Dir		:= reg_Value_WeDriveDir +`\` + public.Zhiwei_WxDrive_Folder
	if reg_Value_WeDriveDir != "" && public.Exist(weDrive_Share_Dir){
		if public.Msg_YesNo("确定手动进行一次 -> 从微盘到共享盘吗？如果俩者文件结构不一致，文件盘将会混沌。")==1{
			cmd := `cmd /c xcopy ` + weDrive_Share_Dir + " /D " + public.Env_ADMainDeptShare + " /S /T /E /C /y"

			public.Execcmd_wait(cmd)
			public.SendServerReport(public.Msg_Report_OverCopyToDeptShare)
			public.Msg("同步完成！")
		}
	}

} 
// 微盘同步 说明
func wxdsExplain(){
	msg :=`
	1.此功能，部门内部的路人甲初始化一次即可，并分享微盘文件夹给炮灰乙、流氓丙即可。

	2.当路人甲没有启动这个小工具时，土匪丁想要同步的话，也时需要初始化。

	5.初始化后，凡是启动了小工具，2小时自动同步一次到微盘。但从微盘同步到部门共享盘中只能是手动的。

	7.但限于微盘的特性，当文件共享盘的文件名发生变化，微盘是依旧保留旧文件夹的。所以微盘的文件时需要定期手动清理的。

	9.关于初始化中路径选择问题：打开微盘，右键打开已下载的文件。根据该文件所在的路径来确定初始化中的路径。

	8.以上，此致，敬礼，望赞！
	`
	public.Msg(msg)

}


//---------------------------------------------------------------
//
//     Kinds of Tools
//
//---------------------------------------------------------------

// 其他工具
func menuInitTools(ni * walk.NotifyIcon){
	fa := "工具集合"

	sub := [...]string{"Excel关键词分割","隐藏桌面图标","显示桌面图标","移动硬盘","测试"}
	// 建立空菜单
	nm,err := walk.NewMenu()
	if err != nil {
		public.PrintLog(err)
	}
	lastone := len(sub)-1
	for i,buttonText := range sub{
		
		// 过滤按钮
		switch i{
		case lastone-1:
			if ! public.TheUser(public.AD_User_huyibo) {continue}
		case lastone:
			if ! public.AdminUser() {continue}
		}

		// 建立 子按钮
		na := walk.NewAction()
		if err := na.SetText(buttonText); err != nil {
			public.PrintLog(err)
		}

		// 为子按钮 添加事件
		switch i{
		case 0:
			na.Triggered().Attach(tMultiSplit)
		case 1:
			na.Triggered().Attach(tHideIcon)
		case 2:
			na.Triggered().Attach(tShowIcon)


		case lastone-1:
			na.Triggered().Attach(tJR_huyibo_movedisk)
		case lastone:
			na.Triggered().Attach(tTest)
		
		}

		// 将 子按钮 添加到 菜单
		nm.Actions().Add(na)
	}

	//将菜单添加到托盘
	sysmenu,err := ni.ContextMenu().Actions().AddMenu(nm)
	if err != nil {
		public.PrintLog(err)
	}

	// 主菜单 属性
	sysmenu.SetText(fa)
	sysmenu.SetVisible(true)
	sysmenu.SetEnabled(true)
	
}
// 其他工具 Excel关键词分割器
func tMultiSplit(){
	public.Execcmd_nowait(public.Startk + public.Link_MultiSplit)
}
// 其他工具 移动硬盘（胡一波专用）
func tJR_huyibo_movedisk(){
	public.SendDaemonExec(`F:\SamsungPortableSSD.exe`)
}
// 其他工具 隐藏图标
func tHideIcon(){
	public.Msg("emmmmmmm,大概下周吧，这周无望哈")
}
// 其他工具 显示图标
func tShowIcon(){
	public.Msg("仅供参考！！")
}
// 其他工具 测试
func tTest(){
	//public.SendDaemonExec(`D:\WXWork.exe`)
}


//---------------------------------------------------------------
//
//     File share
//
//---------------------------------------------------------------

// 文件共享 （包含域用户和大屏主机的文件共享）
func menuInitFileShares(ni * walk.NotifyIcon){
	fa := "文件共享"

	// // 建立空菜单
	mfs,err := walk.NewMenu()
	if err != nil {
		public.PrintLog(err)
	}

	// 说明：添加 域用户 文件共享
	// 方法：列举目录名，生成菜单
	// 其次，列举额目录中的名单作为按钮添加到菜单
	deptList,err := public.ReadDir(public.Env_ADMain)
	if err !=nil {
		public.PrintLog(err)
	}
	for _,memberList := range deptList {
		nm,err := walk.NewMenu()
		if err != nil {
			public.PrintLog(err)
		}
		deptshare := memberList.Name()
		// 不在 其他共享 里 显示自己部门的共享
		if deptshare == public.User_dept_str{
			continue
		}
		member,err := public.ReadDir(public.Env_ADMain + `\` + deptshare)
		if err != nil {
			public.PrintLog(err)
		}
		for _,mem := range member{
			wokrer := mem.Name()
			
			// 建立 子按钮
			na := walk.NewAction()
			if err := na.SetText(public.TrimSuffix(wokrer,".lnk")); err != nil {
				public.PrintLog(err)
			}

			// 为子按钮 添加事件
			na.Triggered().Attach(func(){public.OpenWindow(public.Env_ADMain + `\` + deptshare + `\` + wokrer);return})
				
			// 将 子按钮 添加到 菜单 
			nm.Actions().Add(na)
	
		}
		if m,err := mfs.Actions().AddMenu(nm);err != nil{
			public.PrintLog(err)
		}else{
			m.SetText(deptshare)
			m.SetVisible(true)
			m.SetEnabled(true)

		}
	}

	// 添加
	na := walk.NewAction()
	if err := na.SetText("会议室的大脸机"); err != nil {
		public.PrintLog(err)
	}else{
		//将菜单添加到托盘
		na.Triggered().Attach(func(){public.OpenWindow(`ftp://adserver`)})
		if err := mfs.Actions().Add(na);err != nil{
			public.PrintLog(err)
		}
	}

    //将菜单添加到托盘
	sysmenu,err := ni.ContextMenu().Actions().AddMenu(mfs)
	if err != nil {
			public.PrintLog(err)
	}
	// 主菜单 属性
	sysmenu.SetText(fa)
	sysmenu.SetVisible(true)
	sysmenu.SetEnabled(true)

}


//---------------------------------------------------------------
//
//     My share
//
//---------------------------------------------------------------

func menuInitMyShares(ni * walk.NotifyIcon){
	// envhs := os.Getenv("HOMESHARE")
	// public.PrintLog(envhs)

	fa := "我的共享"

	// 建立空菜单
	nm,err2 := walk.NewMenu()
	if err2 !=nil {
		public.PrintLog(err2)
	}
	// 读取我的部门共享目录
	deptList,err3 := public.ReadDir(public.Env_ADMainDept)
	if err3 !=nil {
		public.PrintLog(err3)
	}

	for _,mem := range deptList{
		wokrer := mem.Name()

		// 建立 子按钮
		na := walk.NewAction()
		if err := na.SetText(public.TrimSuffix(wokrer,".lnk")); err != nil {
			public.PrintLog(err)
		}

		// 为子按钮 添加事件
		na.Triggered().Attach(func(){public.OpenWindow(public.Env_ADMainDept +`\`+ wokrer);return})
			
		// 将 子按钮 添加到 菜单 
		nm.Actions().Add(na)

	}
	//将菜单添加到托盘
	sysmenu,err := ni.ContextMenu().Actions().AddMenu(nm)
	if err != nil {
		public.PrintLog(err)
	}

	// 主菜单 属性
	sysmenu.SetText(fa)
	sysmenu.SetVisible(true)
	sysmenu.SetEnabled(true)
}

