package mongo_model

import (
	"time"
)

type AdvicerTalkSkillMongo struct {
	ProjectId           int32               `json:"projectId" bson:"projectId"`
	AdvicerId           int32               `json:"advicerId" bson:"advicerId"`
	Desc                string              `json:"desc" bson:"desc"`
	NeedsMining         NeedsMining         `json:"needsMining" bson:"needsMining"`
	PainPointResponse   PainPointResponse   `json:"painPointResponse" bson:"painPointResponse"`
	ValueBuilding       ValueBuilding       `json:"valueBuilding" bson:"valueBuilding"`
	ClosingTechniques   ClosingTechniques   `json:"closingTechniques" bson:"closingTechniques"`
	CommunicationRhythm CommunicationRhythm `json:"communicationRhythm" bson:"communicationRhythm"`
	LastUpdateTime      time.Time           `json:"lastUpdateTime" bson:"lastUpdateTime"`
}

func NewAdvicerTalkSkillMongo() *AdvicerTalkSkillMongo {
	return &AdvicerTalkSkillMongo{}
}

func (a *AdvicerTalkSkillMongo) MongoTableName() string {
	return "advicer_talk_skill"
}

type AdvicerTalkSkillMongoEntity struct {
	NeedsMining         NeedsMining         `json:"needsMining"`
	PainPointResponse   PainPointResponse   `json:"painPointResponse"`
	ValueBuilding       ValueBuilding       `json:"valueBuilding"`
	ClosingTechniques   ClosingTechniques   `json:"closingTechniques"`
	CommunicationRhythm CommunicationRhythm `json:"communicationRhythm"`
}

func (a *AdvicerTalkSkillMongo) Entity() *AdvicerTalkSkillMongoEntity {
	return &AdvicerTalkSkillMongoEntity{
		NeedsMining:         a.NeedsMining,
		PainPointResponse:   a.PainPointResponse,
		ValueBuilding:       a.ValueBuilding,
		ClosingTechniques:   a.ClosingTechniques,
		CommunicationRhythm: a.CommunicationRhythm,
	}
}

// NeedsMining 需求挖掘话术
type NeedsMining map[string][]string

func (e *NeedsMining) Example() string {
	return `{"预算需求":["你们总价想控制在多少以内？","是考虑按揭还是一次性？","月供能接受多少范围？"],"居住需求":["几个人住？有老人小孩吗？","主要是自住还是考虑投资？","现在住哪里？想改善哪些方面？"],"通勤需求":["在哪个位置上班？","主要开车还是坐地铁？","对地铁距离有要求吗？"]}`
}

func (e *NeedsMining) Copy() AdviceData {
	return new(NeedsMining)
}

func (e *NeedsMining) Role() AdviceRole {
	return RoleSkill
}

func (e *NeedsMining) Desc() string {
	return "需求挖掘话术"
}

// PainPointResponse 痛点应对策略
type PainPointResponse map[string]map[string]string

func (e *PainPointResponse) Example() string {
	return `{"地块太小":{"承认事实":"14亩确实不大","普遍现象":"2.5环内都是小地块，万景13亩，中铁建8.8亩","转化优势":"但人少安静，楼间距反而更开阔","对比竞品":"339的邦泰才11亩，人家上千万豪宅"},"物业费高":{"理解感受":"我懂你，我们也觉得有点贵","价值分析":"但6块里3块是增值服务（保洁、送外卖）","价格补贴":"前三年补贴到5块，跟其他盘差不多"}}`
}
func (e *PainPointResponse) Copy() AdviceData {
	return new(PainPointResponse)
}

func (e *PainPointResponse) Role() AdviceRole {
	return RoleSkill
}

func (e *PainPointResponse) Desc() string {
	return "痛点应对策略"
}

// ValueBuilding 价值塑造技巧
type ValueBuilding map[string][]string

func (e *ValueBuilding) Example() string {
	return `{"地段价值塑造":["买房最重要的是地段、地段、还是地段","核心地段的核心资产才保值增值","2.5环内的地卖一块少一块，不可再生"],"产品价值塑造":["我们是用改善的价格，买豪宅的标准","很多细节都是3000万豪宅才有的配置","外立面成本比竞品高30%，但单价差不多"]}`
}

func (e *ValueBuilding) Copy() AdviceData {
	return new(ValueBuilding)
}

func (e *ValueBuilding) Role() AdviceRole {
	return RoleSkill
}

func (e *ValueBuilding) Desc() string {
	return "价值塑造技巧"
}

// ClosingTechniques  促单话术
type ClosingTechniques map[string]map[string][]string

func (e *ClosingTechniques) Example() string {
	return `{"紧迫感营造":{"时间紧迫":["今天是月底最后一天，领导有压力价格可谈","我们刚刚开盘，还有额外优惠","月底冲业绩，价格最有弹性"],"房源稀缺":["118只剩20多套了，好楼层不多","这栋楼就60户，卖一套少一套","特价房只有这几套，今天不定可能就没了"]},"优惠策略":{"价格优惠":["今天定的话，我可以跟领导申请额外折扣","买车位的话，总价多给两个点优惠","一次性付款再优惠一个点"],"附加价值":["送一年物业费","送品牌家电礼包","优先选车位"]},"决策推动":{"小步推进":["要不先交个小定保留房源？","可以先排个号，有优惠优先通知你","今天不定的话，我帮你留意好楼层"]}}`
}

func (e *ClosingTechniques) Copy() AdviceData {
	return new(ClosingTechniques)
}

func (e *ClosingTechniques) Role() AdviceRole {
	return RoleSkill
}

func (e *ClosingTechniques) Desc() string {
	return "促单话术"
}

// CommunicationRhythm  沟通节奏控制
type CommunicationRhythm map[string]map[string]string

func (e *CommunicationRhythm) Example() string {
	return `{"开场阶段":{"时间占比":"5%","目标":"建立关系，了解需求","关键动作":"亲切称呼，简单寒暄，确认看房重点"},"沙盘讲解":{"时间占比":"30%","目标":"建立价值认知","关键动作":"板块价值→周边配套→项目亮点→开发商介绍"}}`
}

func (e *CommunicationRhythm) Copy() AdviceData {
	return new(CommunicationRhythm)
}

func (e *CommunicationRhythm) Role() AdviceRole {
	return RoleSkill
}

func (e *CommunicationRhythm) Desc() string {
	return "沟通节奏控制"
}
