package controllers

import (
	"encoding/json"
	"hongze/hz_crm_api/models"
	"hongze/hz_crm_api/models/company"
	"hongze/hz_crm_api/utils"
	"time"
)

//公司未续约操作

type CompanyRenewalController struct {
	BaseAuthController
}

// @Title 新建归因
// @Description 新建归因接口
// @Param	request	body company.CompanyAscribeAddReq true "type json string"
// @Success 200 {object} "保存成功"
// @router /company_ascribe/add [post]
func (this *CompanyRenewalController) CompanyAscribeAdd() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	var req company.CompanyAscribeAddReq
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常!"
		br.ErrMsg = "参数解析失败,Err:" + err.Error()
		return
	}
	ascribeContent := req.AscribeContent
	var condition string
	var pars []interface{}
	condition += " AND ascribe_content = ? "
	pars = append(pars, ascribeContent)
	total, err := company.GetCompanyAscribeCount(condition, pars)
	if err != nil {
		br.Msg = "新建失败"
		br.ErrMsg = "获取失败,GetCompanyAscribeCount Err:" + err.Error()
		return
	}
	if total > 0 {
		br.Msg = "此归因已存在"
		return
	}
	item := new(company.CompanyAscribe)
	item.AscribeContent = ascribeContent
	item.AdminId = sysUser.AdminId
	item.CreateTime = time.Now()
	item.ModifyTime = time.Now()
	newId, err := company.AddCompanyAscribe(item)
	if err != nil {
		br.Msg = "新建失败"
		br.ErrMsg = "新建失败,Err:" + err.Error()
		return
	}
	detail := new(company.CompanyAscribeResp)
	detail.CompanyAscribeId = int(newId)
	detail.AscribeContent = ascribeContent
	resp := new(company.CompanyAscribeDetailResp)
	resp.Detail = detail
	br.Ret = 200
	br.Success = true
	br.Data = resp
	br.Msg = "新建成功"
}

// @Title 归因列表接口
// @Description 归因列表接口
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Success 200 {object} company.CompanyAscribeListResp
// @router /company_ascribe/list [get]
func (this *CompanyRenewalController) CompanyAscribeList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		return
	}
	keyWord := this.GetString("KeyWord")
	var condition string
	var pars []interface{}
	if keyWord != "" {
		condition += ` AND  ascribe_content LIKE '%` + keyWord + `%'  ORDER  BY  create_time DESC   `
	}
	list, err := company.GetCompanyAscribeList(condition, pars, 0, 0)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败,Err:" + err.Error()
		return
	}
	resp := new(company.CompanyAscribeListResp)
	if len(list) == 0 {
		list = make([]*company.CompanyAscribeResp, 0)
	}
	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 添加未续约备注
// @Description 添加未续约备注接口
// @Param	request	body company.CompanyNoRenewedNoteReq true "type json string"
// @Success 200 {object} "保存成功"
// @router /company_no_renewed_note/add [post]
func (this *CompanyRenewalController) CompanyNoRenewedNoteAdd() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	var req company.CompanyNoRenewedNoteReq
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常!"
		br.ErrMsg = "参数解析失败,Err:" + err.Error()
		return
	}
	content := req.Content
	companyId := req.CompanyId
	productId := req.ProductId
	if companyId < 1 {
		br.Msg = "公司ID错误!"
		return
	}
	if productId != 1 && productId != 2 {
		br.Msg = "ProductId错误!"
		return
	}
	item := new(company.CompanyNoRenewedNote)
	item.Content = content
	item.CompanyId = companyId
	item.AdminId = sysUser.AdminId
	item.ProductId = productId
	item.CreateTime = time.Now()
	item.ModifyTime = time.Now()
	err = company.AddCompanyNoRenewedNote(item)
	if err != nil {
		br.Msg = "新建失败"
		br.ErrMsg = "新建失败,Err:" + err.Error()
		return
	}
	br.Ret = 200
	br.Success = true
	br.Msg = "新建成功"
}

// @Title 未续约备注列表
// @Description 未续约备注列表接口
// @Param   CompanyId   query   int  true       "公司ID"
// @Param   ProductId   query   int  true       "产品ID 1:FICC ,2:权益"
// @Success 200 {object} company.CompanyAscribeListResp
// @router /company_no_renewed_note/list [get]
func (this *CompanyRenewalController) CompanyNoRenewedNoteList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		return
	}
	companyId, _ := this.GetInt("CompanyId")
	productId, _ := this.GetInt("ProductId")
	if companyId < 1 {
		br.Msg = "公司ID错误!"
		return
	}
	if productId != 1 && productId != 2 {
		br.Msg = "ProductId错误!"
		return
	}
	var condition string
	var pars []interface{}
	condition += ` AND  company_id  = ?  AND product_id = ?  ORDER  BY  create_time DESC   `
	pars = append(pars, companyId, productId)
	list, err := company.GetCompanyNoRenewedNoteList(condition, pars, 0, 0)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败,Err:" + err.Error()
		return
	}
	resp := new(company.CompanyNoRenewedNoteListResp)
	if len(list) == 0 {
		list = make([]*company.CompanyNoRenewedNoteResp, 0)
	}
	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 通过归因添加确认不续约
// @Description 通过归因添加确认不续约接口
// @Param	request	body company.CompanyNoRenewedNoteReq true "type json string"
// @Success 200 {object} "保存成功"
// @router /company_no_renewed_ascribe/add [post]
func (this *CompanyRenewalController) CompanyNoRenewedAscribeAdd() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}

	//内容仅权益管理员账号可以修改
	if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_ADMIN {
		br.Msg = "仅管理员可修改!"
		return
	}
	var req company.CompanyNoRenewedAscribeReq
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常!"
		br.ErrMsg = "参数解析失败,Err:" + err.Error()
		return
	}
	content := req.Content
	companyId := req.CompanyId
	productId := req.ProductId
	companyAscribeId := req.CompanyAscribeId

	if content == "" {
		br.Msg = "内容不能为空!"
		return
	}
	if companyId < 1 {
		br.Msg = "公司ID错误!"
		return
	}
	if productId != 1 && productId != 2 {
		if companyId < 1 {
			br.Msg = "ProductId错误!"
			return
		}
	}
	detail, err := company.GetCompanyAscribeDetail(companyAscribeId)
	if err != nil {
		br.Msg = "新建失败"
		br.ErrMsg = "新建失败,GetCompanyAscribeDetail Err:" + err.Error()
		return
	}
	var condition string
	var pars []interface{}
	condition += ` AND  company_id  = ?  AND product_id = ?  ORDER  BY  create_time DESC   `
	pars = append(pars, companyId, productId)

	total, err := company.GetCompanyNoRenewedAscribeCount(condition, pars)
	if err != nil {
		br.Msg = "新建失败"
		br.ErrMsg = "新建失败,GetCompanyNoRenewedAscribeCount Err:" + err.Error()
		return
	}
	item := new(company.CompanyNoRenewedAscribe)
	item.CompanyAscribeId = companyAscribeId
	item.AscribeContent = detail.AscribeContent
	item.Content = content
	item.ProductId = productId
	item.CompanyId = companyId
	item.AdminId = sysUser.AdminId
	item.CreateTime = time.Now()
	item.ModifyTime = time.Now()

	itemLog := new(company.CompanyNoRenewedAscribeLog)
	itemLog.CompanyAscribeId = companyAscribeId
	itemLog.AscribeContent = detail.AscribeContent
	itemLog.Content = content
	itemLog.ProductId = productId
	itemLog.CompanyId = companyId
	itemLog.AdminId = sysUser.AdminId
	itemLog.CreateTime = time.Now()
	itemLog.ModifyTime = time.Now()
	if total == 0 {
		err = company.AddCompanyNoRenewedAscribe(item, itemLog)
	} else {
		err = company.UpdateCompanyNoRenewedAscribe(item, itemLog)
	}
	if err != nil {
		br.Msg = "新建失败"
		br.ErrMsg = "新建失败,Err:" + err.Error()
		return
	}
	br.Ret = 200
	br.Success = true
	br.Msg = "新建成功"
}

// @Title 确认归因不续约详情接口
// @Description 确认归因不续约详情接口
// @Param   CompanyId   query   int  true       "公司ID"
// @Param   ProductId   query   int  true       "产品ID 1:FICC ,2:权益"
// @Success 200 {object} company.CompanyAscribeListResp
// @router /company_no_renewed_ascribe/detail [get]
func (this *CompanyRenewalController) CompanyNoRenewedAscribeAddDetail() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		return
	}
	companyId, _ := this.GetInt("CompanyId")
	productId, _ := this.GetInt("ProductId")
	if companyId < 1 {
		br.Msg = "公司ID错误!"
		return
	}
	if productId != 1 && productId != 2 {
		br.Msg = "ProductId错误!"
		return
	}
	resp := new(company.CompanyNoRenewedAscribeDetailResp)
	detail, err := company.GetCygxProductInteriorDetail(companyId, productId)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败,Err:" + err.Error()
		return
	}
	resp.Detail = detail
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}