package controllers

import (
	"github.com/revel/revel"
	//	"encoding/json"
	//	"gopkg.in/mgo.v2/bson"
	"github.com/leanote/leanote/app/info"
	. "github.com/leanote/leanote/app/lea"
	//	"github.com/leanote/leanote/app/types"
	//	"io/ioutil"
	//	"fmt"
	//	"math"
	//	"os"
	//	"path"
	"strconv"
)

type User struct {
	BaseController
}

func (c User) Account(tab int) revel.Result {
	userInfo := c.GetUserInfo()
	c.ViewArgs["userInfo"] = userInfo
	c.ViewArgs["tab"] = tab
	c.SetLocale()
	return c.RenderTemplate("user/account.html")
}

// 修改用户名, 需要重置session
func (c User) UpdateUsername(username string) revel.Result {
	re := info.NewRe()
	if c.GetUserId() == configService.GetGlobalStringConfig("demoUserId") {
		re.Msg = "cannotUpdateDemo"
		return c.RenderRe(re)
	}

	if re.Ok, re.Msg = Vd("username", username); !re.Ok {
		return c.RenderRe(re)
	}

	re.Ok, re.Msg = userService.UpdateUsername(c.GetUserId(), username)
	if re.Ok {
		c.UpdateSession("Username", username)
	}
	return c.RenderRe(re)
}

// 修改密码
func (c User) UpdatePwd(oldPwd, pwd string) revel.Result {
	re := info.NewRe()
	if c.GetUserId() == configService.GetGlobalStringConfig("demoUserId") {
		re.Msg = "cannotUpdateDemo"
		return c.RenderRe(re)
	}
	if re.Ok, re.Msg = Vd("password", oldPwd); !re.Ok {
		return c.RenderRe(re)
	}
	if re.Ok, re.Msg = Vd("password", pwd); !re.Ok {
		return c.RenderRe(re)
	}
	re.Ok, re.Msg = userService.UpdatePwd(c.GetUserId(), oldPwd, pwd)
	return c.RenderRe(re)
}

// 更新主题
func (c User) UpdateTheme(theme string) revel.Result {
	re := info.NewRe()
	re.Ok = userService.UpdateTheme(c.GetUserId(), theme)
	if re.Ok {
		c.UpdateSession("Theme", theme)
	}
	return c.RenderJSON(re)
}

// 发送邀请链接
func (c User) SendRegisterEmail(content, toEmail string) revel.Result {
	re := info.NewRe()
	if content == "" || !IsEmail(toEmail) {
		return c.RenderJSON(re)
	}

	re.Ok = emailService.SendInviteEmail(c.GetUserInfo(), toEmail, content)
	return c.RenderJSON(re)
}

//---------------------------

// 重新发送激活邮件
func (c User) ReSendActiveEmail() revel.Result {
	re := info.NewRe()
	re.Ok = emailService.RegisterSendActiveEmail(c.GetUserInfo(), c.GetEmail())
	return c.RenderJSON(re)
}

// 通过点击链接
// 修改邮箱
func (c User) UpdateEmail(token string) revel.Result {
	c.SetUserInfo()

	ok, msg, email := userService.UpdateEmail(token)

	c.ViewArgs["title"] = "验证邮箱"
	c.ViewArgs["ok"] = ok
	c.ViewArgs["msg"] = msg
	c.ViewArgs["email"] = email

	// 修改session
	if ok {
		c.UpdateSession("Email", email)
	}

	return c.RenderTemplate("user/update_email.html")
}

// 注册后激活邮箱
func (c User) ActiveEmail(token string) revel.Result {
	c.SetUserInfo()

	ok, msg, email := userService.ActiveEmail(token)

	// 需要修改session
	if ok {
		c.UpdateSession("Verified", "1")
	}

	c.ViewArgs["title"] = "验证邮箱"
	c.ViewArgs["ok"] = ok
	c.ViewArgs["msg"] = msg
	c.ViewArgs["email"] = email

	return c.RenderTemplate("user/active_email.html")
}

//-----------------
// 用户偏爱
func (c User) UpdateColumnWidth(notebookWidth, noteListWidth, mdEditorWidth int) revel.Result {
	re := info.NewRe()
	re.Ok = userService.UpdateColumnWidth(c.GetUserId(), notebookWidth, noteListWidth, mdEditorWidth)
	if re.Ok {
		c.UpdateSession("NotebookWidth", strconv.Itoa(notebookWidth))
		c.UpdateSession("NoteListWidth", strconv.Itoa(noteListWidth))
		c.UpdateSession("MdEditorWidth", strconv.Itoa(mdEditorWidth))

		LogJ(c.Session)
	}
	return c.RenderJSON(re)
}
func (c User) UpdateLeftIsMin(leftIsMin bool) revel.Result {
	re := info.NewRe()
	re.Ok = userService.UpdateLeftIsMin(c.GetUserId(), leftIsMin)
	if re.Ok {
		if leftIsMin {
			c.UpdateSession("LeftIsMin", "1")
		} else {
			c.UpdateSession("LeftIsMin", "0")
		}
	}
	return c.RenderJSON(re)
}