package code

var InitTpt = `package {{name}}

import (
	. "code.hoteas.com/golang/hotime"
	. "code.hoteas.com/golang/hotime/common"
)

var ID = "{{id}}"

// Project 管理端项目
var Project = Proj{
	//"user": UserCtr,
	{{tablesCtr}}
    "hotime":Ctr{
		"login": func(that *Context) {

			name := that.Req.FormValue("name")
			password := that.Req.FormValue("password")
			if name == "" || password == "" {
				that.Display(3, "参数不足")
				return
			}
			user := that.Db.Get("admin", "*", Map{"AND": Map{"OR":Map{"name": name,"phone":name}, "password": Md5(password)}})
			if user == nil {
				that.Display(5, "登录失败")
				return
			}
			that.Session("admin_id", user.GetCeilInt("id"))
			that.Session("admin_name", name)
			that.Display(0, that.SessionId)
		},
		"logout": func(that *Context) {
			that.Session("admin_id", nil)
			that.Session("admin_name", nil)
			that.Display(0, "退出登录成功")
		},
		"info": func(that *Context) {
			hotimeName := that.RouterString[0]
			data := that.Db.Get("admin", "*", Map{"id": that.Session("admin_id").ToCeilInt()})
			str, inData := that.MakeCodeRouter[hotimeName].Info("admin", data, that.Db)
			where := Map{"id": that.Session("admin_id").ToCeilInt()}
			if len(inData) ==1 {
				inData["id"] =where["id"]
				where = Map{"AND": inData}
			}else if len(inData) >1 {
				where["OR"]=inData
				where = Map{"AND": where}
			}
			re := that.Db.Get("admin", str, where)
			if re == nil {
				that.Display(4, "找不到对应信息")
				return
			}
			for k, v := range re {
				column := that.MakeCodeRouter[hotimeName].TableColumns["admin"][k]
				if column == nil {
					continue
				}
				if (column["list"] == nil || column.GetBool("list")) && column.GetString("link") != "" {
					re[column.GetString("link")] = that.Db.Get(column.GetString("link"),"id," +column.GetString("value"), Map{"id": v})
				}
			}

			that.Display(0, re)
		},
	},
}
`
var CtrTpt = `package {{name}}

import (
	. "code.hoteas.com/golang/hotime"
	. "code.hoteas.com/golang/hotime/common"
	"strings"
)

var {{table}}Ctr = Ctr{
	"info": func(that *Context) {
			hotimeName := that.RouterString[0]
		data := that.Db.Get("admin", "*", Map{"id": that.Session("admin_id").ToCeilInt()})
		str, inData := that.MakeCodeRouter[hotimeName].Info(that.RouterString[1], data, that.Db)
		where := Map{"id": that.RouterString[2]}

		if len(inData) ==1 {
			inData["id"] =where["id"]
			where = Map{"AND": inData}
		}else if len(inData) >1 {
			where["OR"]=inData
			where = Map{"AND": where}
		}

		re := that.Db.Get(that.RouterString[1], str, where)

		if re == nil {
			that.Display(4, "找不到对应信息")
			return
		}

		for k, v := range re {
			column := that.MakeCodeRouter[hotimeName].TableColumns[that.RouterString[1]][k]
			if column == nil {
				continue
			}
			if (column["list"] == nil || column.GetBool("list")) && column.GetString("link") != "" {
				re[column.GetString("link")] = that.Db.Get(column.GetString("link"), "id,"+column.GetString("value"), Map{"id": v})
			}
		}

		that.Display(0, re)
	},
	"add": func(that *Context) {
		hotimeName := that.RouterString[0]
		inData := that.MakeCodeRouter[hotimeName].Add(that.RouterString[1], that.Req)
		if inData == nil {
			that.Display(3, "请求参数不足")
			return
		}


		re := that.Db.Insert(that.RouterString[1], inData)

		if re == 0 {
			that.Display(4, "无法插入对应数据")
			return
		}
		//索引管理，便于检索以及权限
		if inData.Get("parent_id") != nil && inData.GetString("index") != "" {
			index := that.Db.Get(that.RouterString[1], "` + "`index`" + `", Map{"id": inData.Get("parent_id")})
			inData["index"] = index.GetString("index")+ObjToStr(re)+","
			that.Db.Update(that.RouterString[1],Map{"index":inData["index"]},Map{"id":re})
		}else if inData.GetString("index") != ""{
			inData["index"] = "," + ObjToStr(re) + ","
			that.Db.Update(that.RouterString[1], Map{"index": inData["index"]}, Map{"id": re})
		}

		that.Display(0, re)
	},
	"update": func(that *Context) {
		hotimeName := that.RouterString[0]
		inData := that.MakeCodeRouter[hotimeName].Edit(that.RouterString[1], that.Req)
		if inData == nil {
			that.Display(3, "没有找到要更新的数据")
			return
		}

		//索引管理，便于检索以及权限
		if inData.Get("parent_id") != nil && inData.GetString("index") != "" {
			Index := that.Db.Get(that.RouterString[1], "` + "`index`" + `", Map{"id": that.RouterString[2]})
			parentIndex := that.Db.Get(that.RouterString[1], "` + "`index`" + `", Map{"id": inData.Get("parent_id")})
			inData["index"] = parentIndex.GetString("index") + that.RouterString[2] + ","

			childNodes := that.Db.Select(that.RouterString[1], "id,` + "`index`" + `", Map{"index[~]": "," + that.RouterString[2] + ","})

			for _, v := range childNodes {
				v["index"] = strings.Replace(v.GetString("index"), Index.GetString("index"), inData.GetString("index"), -1)
				that.Db.Update(that.RouterString[1], Map{"index": v["index"]}, Map{"id": v.GetCeilInt("id")})
			}

		}

		re := that.Db.Update(that.RouterString[1], inData, Map{"id": that.RouterString[2]})

		if re == 0 {
			that.Display(4, "更新数据失败")
			return
		}

		that.Display(0, re)
	},
	"remove": func(that *Context) {
		hotimeName := that.RouterString[0]
		inData := that.MakeCodeRouter[hotimeName].Delete(that.RouterString[1], that.Req)
		if inData == nil {
			that.Display(3, "请求参数不足")
			return
		}
		re :=int64(0)
		//索引管理，便于检索以及权限
		if inData.Get("parent_id") != nil && inData.GetSlice("index") != nil {
			re=that.Db.Delete(that.RouterString[1], Map{"index[~]": "," + that.RouterString[2] + ","})
		}else {
			re=that.Db.Delete(that.RouterString[1], Map{"id": that.RouterString[2]})
		}

		if re == 0 {
			that.Display(4, "删除数据失败")
			return
		}
		that.Display(0, "删除成功")
	},

	"search": func(that *Context) {
		hotimeName := that.RouterString[0]
		data := that.Db.Get("admin", "*", Map{"id": that.Session("admin_id").ToCeilInt()})

		columnStr, leftJoin, where := that.MakeCodeRouter[hotimeName].Search(that.RouterString[1], data, that.Req, that.Db)

		page := ObjToInt(that.Req.FormValue("page"))
		pageSize := ObjToInt(that.Req.FormValue("pageSize"))

		if page < 1 {
			page = 1
		}

		if pageSize <= 0 {
			pageSize = 20
		}

		count := that.Db.Count(that.RouterString[1], leftJoin, where)
		reData := that.Db.Page(page, pageSize).
			PageSelect(that.RouterString[1], leftJoin, columnStr, where)

		for _, v := range reData {
			for k, _ := range v {
				column := that.MakeCodeRouter[hotimeName].TableColumns[that.RouterString[1]][k]
				if column == nil {
					continue
				}

				if column["list"] != false && column["name"] == "parent_id" && column.GetString("link") != "" {
					parentC := that.Db.Get(column.GetString("link"), column.GetString("value"), Map{"id": v.GetCeilInt(k)})
					v[column.GetString("link")+"_"+column.GetString("name")+"_"+column.GetString("value")] = ""
					if parentC != nil {
						v[column.GetString("link")+"_"+column.GetString("name")+"_"+column.GetString("value")] = parentC.GetString(column.GetString("value"))
					}
				}

			}
		}

		that.Display(0, Map{"count": count, "data": reData})
	},
}
`
