package controllers

import (
	"encoding/json"
	"kefu_server/models"
	"kefu_server/utils"
	"time"

	"github.com/astaxie/beego"
	"github.com/astaxie/beego/logs"
	"github.com/astaxie/beego/orm"
	"github.com/astaxie/beego/validation"
)

// QiniuController struct
type QiniuController struct {
	beego.Controller
}

// Get get qiniu config info
func (c *QiniuController) Get() {

	o := orm.NewOrm()
	token := c.Ctx.Input.Header("Authorization")
	_admin := models.Admin{Token: token}
	_ = o.Read(&_admin, "Token")

	if _admin.Root != 1 {
		c.Data["json"] = utils.ResponseError(c.Ctx, "您没有权限获取配置!", nil)
		c.ServeJSON()
		return
	}

	qiniuSetting := models.QiniuSetting{ID: 1}
	if err := o.Read(&qiniuSetting); err != nil {
		logs.Error(err)
		c.Data["json"] = utils.ResponseError(c.Ctx, "查询失败!", err)
	} else {
		c.Data["json"] = utils.ResponseSuccess(c.Ctx, "查询成功!", &qiniuSetting)
	}

	c.ServeJSON()
}

// Put update
func (c *QiniuController) Put() {

	qiniuSetting := models.QiniuSetting{}
	qiniuSetting.UpdateAt = time.Now().Unix()
	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &qiniuSetting); err != nil {
		logs.Error(err)
		c.Data["json"] = utils.ResponseError(c.Ctx, "参数错误!", nil)
		c.ServeJSON()
		return
	}

	o := orm.NewOrm()

	token := c.Ctx.Input.Header("Authorization")
	_admin := models.Admin{Token: token}
	_ = o.Read(&_admin, "Token")
	if _admin.Root != 1 {
		c.Data["json"] = utils.ResponseError(c.Ctx, "您没有权限设置!", nil)
		c.ServeJSON()
		return
	}

	// validation
	valid := validation.Validation{}
	valid.Required(qiniuSetting.Bucket, "bucket").Message("bucket不能为空!")
	valid.MaxSize(qiniuSetting.Bucket, 100, "bucket").Message("bucket不能超过100字符!")
	valid.Required(qiniuSetting.AccessKey, "access_key").Message("access_key不能为空!")
	valid.MaxSize(qiniuSetting.AccessKey, 100, "access_key").Message("access_key不能超过100字符!")
	valid.Required(qiniuSetting.SecretKey, "secret_key").Message("secret_key不能为空!")
	valid.MaxSize(qiniuSetting.SecretKey, 100, "secret_key").Message("secret_key不能超过100字符!")
	valid.Required(qiniuSetting.Host, "host").Message("host不能为空!")
	valid.MaxSize(qiniuSetting.Host, 100, "host").Message("host不能超过100字符!")
	if valid.HasErrors() {
		for _, err := range valid.Errors {
			logs.Error(err)
			c.Data["json"] = utils.ResponseError(c.Ctx, err.Message, nil)
			break
		}
		c.ServeJSON()
		return
	}

	qiniuSetting.ID = 1
	qiniuSetting.UpdateAt = time.Now().Unix()
	if _, err := o.Update(&qiniuSetting); err != nil {
		logs.Error(err)
		c.Data["json"] = utils.ResponseError(c.Ctx, "更新失败!", err)
	} else {
		c.Data["json"] = utils.ResponseSuccess(c.Ctx, "更新成功!", &qiniuSetting)
	}
	c.ServeJSON()
}