package logic

import (
	"crm-server/internal/dao"
	"crm-server/internal/model"
	"crm-server/internal/service"
	"strconv"
	"time"
)

const INSERTCRMUSER  = "INSERT INTO `lie_user` (" +
	"`outter_uid`, `source`,`adtag`, `mobile`,`email`, `create_time`,`copy_ctime`, `customer_identity`,`name`, `channel_source`,`remark`,`ptag`,`channel_source_other`, `channel_type`" +
	")VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)"

const INSERTCOMPANY  = "INSERT INTO `lie_user_company` (" +
	"`user_id`, `com_name`,`address`, `fixed_tel`,`fax`, `main_brand`,`com_desc`, `create_time`)VALUES(?,?,?,?,?,?,?,?)"

const INSERTISCREATEORDER  = "INSERT INTO `lie_user_extend` (`user_id`, `no_create_order`,`outter_uid`)VALUES(?,?,?)"

const INSERTSALES  = "INSERT INTO `lie_salesman` (`user_id`, `sale_id`,`assign_time`, `update_time`)VALUES(?,?,?,?)"

const INSERTINVOICECOMUSER = "INSERT INTO `lie_invoice_com_user` (`com_id`, `user_id`, `sale_id`, `sale_type`, `create_time`)VALUES( ?, ?, ?,  ?, ?)"

const INSERTFOLLOWTASK = "INSERT INTO `lie_task_info` (user_id, task_id, task_type, task_display_degree, sale_id, end_time, create_time, update_time) VALUES (?,?,?,?,?,?,?,?)"


//检测会员用户是否存在
func CheckMemberIdIsHave(memberId int)(returnUserId int){

	var userId int = 0
	dao.GetDb().QueryRowx("select user_id from lie_user where outter_uid = ?",memberId).Scan(&userId)
	return userId
}

//增加从会员系统来的用户
func InsertMemberUser(memberInfo model.MemberAddUserData)bool  {

	//开启事务,增加用户数据
	dbTran,_ := dao.GetDb().Begin()
	insertResult, err := dbTran.Exec(INSERTCRMUSER,memberInfo.User_Id,memberInfo.Source,memberInfo.Adtag,memberInfo.Mobile,memberInfo.Email,memberInfo.Create_Time,
		memberInfo.Create_Time, memberInfo.Customer_identity,memberInfo.User_Name,memberInfo.Channel_source,memberInfo.Remark,memberInfo.Ptag,"",memberInfo.Channel_type)

	if err != nil {
		service.WriteErrDetail("插入用户数据错误:增加用户数据"+err.Error())
		err = dbTran.Rollback()
		return false
	}

	//获取插入ID
	lastInsertId,err := insertResult.LastInsertId()
	if err != nil {
		service.WriteErrDetail("插入用户数据错误:获取插入ID"+err.Error())
		err = dbTran.Rollback()
		return false
	}


	//插入是否下单
	insertResult, err = dbTran.Exec(INSERTISCREATEORDER,lastInsertId,memberInfo.No_Create_Order,memberInfo.User_Id)
	if err != nil {
		service.WriteErrDetail("插入用户数据错误:插入是否下单"+err.Error())
		err = dbTran.Rollback()
		return false
	}

	if memberInfo.Sale_Id != 0 {

		//插入跟进销售
		insertResult, err = dbTran.Exec(INSERTSALES,lastInsertId,memberInfo.Sale_Id,memberInfo.Create_Time,memberInfo.Create_Time)
		if err != nil {
			service.WriteErrDetail("插入用户数据错误:插入跟进销售"+err.Error())
			err = dbTran.Rollback()
			return false
		}

		//插入跟进记录
		insertResult, err = dbTran.Exec("INSERT INTO `lie_assign_active` (`user_id`, `turn_in_id`,`is_success`,`change_time`,`create_time`)VALUES(?,?,1,?,?);",lastInsertId,memberInfo.Sale_Id,memberInfo.Create_Time,memberInfo.Create_Time)
		if err != nil {
			service.WriteErrDetail("插入用户数据错误:插入跟进销售记录"+err.Error())
			err = dbTran.Rollback()
			return false
		}
	}

	//插入用户关联关系 20200406新增
	insertResult, err = dbTran.Exec(INSERTINVOICECOMUSER,0,memberInfo.User_Id,memberInfo.Sale_Id,memberInfo.Channel_type,memberInfo.Create_Time)
	if err != nil {
		service.WriteErrDetail("插入用户数据错误:插入用户关联关系"+err.Error())
		err = dbTran.Rollback()
		return false
	}

	//插入公司
	insertResult, err = dbTran.Exec(INSERTCOMPANY,lastInsertId,memberInfo.Com_Name,memberInfo.Com_Full_addr,memberInfo.Com_Telphone,memberInfo.Com_Fax,"",memberInfo.Com_Desc, memberInfo.Create_Time)
	if err != nil {
		service.WriteErrDetail("插入用户数据错误:插入公司"+err.Error())
		err = dbTran.Rollback()
		return false
	}

	curr_time := time.Now().Unix()

	// 若是线下用户,则新增跟进用户任务
	if memberInfo.Channel_type == 2 || memberInfo.Channel_type == 3 {
		var task_setup model.TaskSetup
		dao.GetNewDb().Get(&task_setup, "select * from lie_task_setup where task_type = ?", 10)

		if task_setup.Id != 0 {
			var task_setup_details model.TaskSetupDetails
			dao.GetNewDb().Get(&task_setup_details, "select * from lie_task_setup_details where task_id = ?", task_setup.Id)

			var task_end_time int64
			task_end_time = curr_time + (task_setup_details.TaskEndTime * 60)
			dbTran.Exec(INSERTFOLLOWTASK, lastInsertId, task_setup.Id, task_setup.TaskType, task_setup.TaskDisplayDegree, memberInfo.Sale_Id, task_end_time, curr_time, curr_time)
		}
	}

	var event string
	if memberInfo.Sale_Id != 0 {
		event = "已指派客服,客服ID:"+ strconv.Itoa(memberInfo.Sale_Id)
	}
	dbTran.Exec("insert into lie_action_log (user_id, type, event, remark, create_time) values (?, ?, ?, ?, ?)", lastInsertId, 2, "新增用户", event, curr_time)

	dbTran.Commit()
	return true
}