package main

import (
	"../../hotime"
	"../../hotime/common"
	"../dri/ddsms"
	"./admin"
	"./app"
	"fmt"
	"io"
	"os"
	"strings"
	"time"
)

func main() {
	date, _ := time.Parse("2006-01-02 15:04", time.Now().Format("2006-01-02")+" 14:00")
	fmt.Println(date, date.Unix())
	//fmt.Println("0123456"[1:7])
	appIns := hotime.Init("config/config.json")
	//RESTfull接口适配
	appIns.SetConnectListener(func(context *hotime.Context) bool {

		if len(context.RouterString) > 1 && context.RouterString[0] == "admin" {
			if context.RouterString[1] == "hotime" && context.RouterString[2] == "login" {
				return true
			}
			if context.RouterString[1] == "hotime" && context.RouterString[2] == "logout" {
				return true
			}

			if context.Session("admin_id").Data == nil {
				context.Display(2, "你还没有登录")
				return false
			}
		}

		//文件上传接口
		if len(context.RouterString) == 1 && context.RouterString[0] == "file" && context.Req.Method == "POST" {

			//读取网络文件
			fi, fheader, err := context.Req.FormFile("file")
			if err != nil {
				context.Display(3, err)
				return false

			}
			filePath := context.Config.GetString("filePath")
			if filePath == "" {
				filePath = "file/2006/01/02/"
			}

			path := time.Now().Format(filePath)
			e := os.MkdirAll(context.Config.GetString("tpt")+"/"+path, os.ModeDir)
			if e != nil {
				context.Display(3, e)
				return false
			}
			filePath = path + common.Md5(common.ObjToStr(common.RandX(100000, 9999999))) + fheader.Filename[strings.LastIndex(fheader.Filename, "."):]
			newFile, e := os.Create(context.Config.GetString("tpt") + "/" + filePath)

			if e != nil {
				context.Display(3, e)
				return false
			}

			_, e = io.Copy(newFile, fi)

			if e != nil {
				context.Display(3, e)
				return false
			}

			context.Display(0, filePath)
			return false
		}

		if len(context.RouterString) < 2 || len(context.RouterString) > 3 ||
			!(context.Router[context.RouterString[0]] != nil &&
				context.Router[context.RouterString[0]][context.RouterString[1]] != nil) {
			return true
		}
		//排除无效操作
		if len(context.RouterString) == 2 &&
			context.Req.Method != "GET" &&
			context.Req.Method != "POST" {
			return true
		}
		//列表检索
		if len(context.RouterString) == 2 &&
			context.Req.Method == "GET" {
			if context.Router[context.RouterString[0]][context.RouterString[1]]["search"] == nil {
				return true
			}
			context.Router[context.RouterString[0]][context.RouterString[1]]["search"](context)
		}
		//新建
		if len(context.RouterString) == 2 &&
			context.Req.Method == "POST" {
			if context.Router[context.RouterString[0]][context.RouterString[1]]["add"] == nil {
				return true
			}
			context.Router[context.RouterString[0]][context.RouterString[1]]["add"](context)
		}
		if len(context.RouterString) == 3 &&
			context.Req.Method == "POST" {
			return true
		}
		//查询单条
		if len(context.RouterString) == 3 &&
			context.Req.Method == "GET" {

			if context.Router[context.RouterString[0]][context.RouterString[1]]["info"] == nil {
				return true
			}

			context.Router[context.RouterString[0]][context.RouterString[1]]["info"](context)
		}
		//更新
		if len(context.RouterString) == 3 &&
			context.Req.Method == "PUT" {

			if context.Router[context.RouterString[0]][context.RouterString[1]]["update"] == nil {
				return true
			}

			context.Router[context.RouterString[0]][context.RouterString[1]]["update"](context)
		}
		//移除
		if len(context.RouterString) == 3 &&
			context.Req.Method == "DELETE" {

			if context.Router[context.RouterString[0]][context.RouterString[1]]["remove"] == nil {
				return true
			}

			context.Router[context.RouterString[0]][context.RouterString[1]]["remove"](context)
		}
		context.View()
		return false
	})

	//makeCode := code.MakeCode{}
	//fmt.Println(common.ObjToStr(makeCode.Db2JSON("admin","test",appIns.Db)))
	if ddsms.DefaultDDY.ApiKey == "" {
		ddsms.DefaultDDY.Init(appIns.Config.GetString("smsKey"))
	}

	appIns.Run(hotime.Router{
		"admin": admin.Project,
		"app":   app.Project,
		//"app": hotime.Proj{
		//	"index": hotime.Ctr{
		//		"test": func(this *hotime.Context) {
		//
		//			data := this.Db.Get("cached", "*")
		//			fmt.Println(data)
		//			fmt.Println(this.Session("test").ToCeilInt())
		//			this.Session("test1", 98984984)
		//			fmt.Println(this.Session("test1").Data)
		//			this.Error.SetError(errors.New("dasdasdas"))
		//			//fmt.Println(this.Db.GetTag())
		//			//this.Application.Log.Error("dasdasdas")
		//			//this.Log.Error("dadasdasd")
		//			//x:=this.Db.Action(func(db hotime.HoTimeDB) bool {
		//			//
		//			//	db.Insert("user",hotime.Map{"unickname":"dasdas"})
		//			//
		//			//	return true
		//			//})
		//			//hotime.LogError("dasdasdasdasdas")
		//			this.Display(5, "dsadas")
		//		},
		//		"websocket": func(this *hotime.Context) {
		//			hdler := websocket.Handler(func(ws *websocket.Conn) {
		//				for true {
		//					msg := make([]byte, 5120)
		//					n, err := ws.Read(msg)
		//					go func() {
		//						time.Sleep(time.Second * 5)
		//						ws.Write([]byte("dsadasdasgregergrerge"))
		//
		//					}()
		//					if err != nil {
		//						return
		//					}
		//					fmt.Printf("Receive: %s\n", msg[:n])
		//
		//					send_msg := "[" + string(msg[:n]) + "]"
		//					m, err := ws.Write([]byte(send_msg))
		//					if err != nil {
		//						return
		//					}
		//					fmt.Printf("Send: %s\n", msg[:m])
		//				}
		//			})
		//			hdler.ServeHTTP(this.Resp, this.Req)
		//		},
		//	},
		//},
	})
}
