# This Python file uses the following encoding: utf-8

import pandas as pd
from AgentProxy import AgentProxy
from datetime import datetime  # Add this import

# Here you need to replace the API Key and API Secret with your，I provide a test key and secret here
api_key = '25bda2c39c0f8ca0' 
api_secret = 'e0008b9b9727cb8ceea5a132dbe62495' 
assistant_id = "66bb09a84673b57506fe7bbd" 
agent = AgentProxy(assistant_id, api_key, api_secret)

# Prospecting
# Evaluation
# Qualification
# Bidding / Negotiating
# Contract Review
# Closed Won
# Cancel
# Closed Lost
sales_stages = ["Prospecting", "Evaluation", "Qualification", "Bidding / Negotiating", "Contract Review", "Closed Won", "Cancel", "Closed Lost"]

prompt = "某公司销售阶段分为如下几个定义，你能告诉我什么信息 "+ str(sales_stages)
print(prompt)
# print(agent.send_message(prompt))


professional_won_path = [
    {
        "销售阶段名称": "01-prospecting",
        "客户采购行为": "",
        "销售阶段任务": "了解客户信息、与客户进行交流，初步了解客户需求，并确定项目对接人，进入客户供应商名单",
        "关键获取信息": "1.联系人姓名\n2.部门\n3.职务\n4.手机\n5.预估整体项目节点数\n6.CRM情况\n7.是否是独立预算",
        "销售关键动作": "1、了解客户组织架构，了解客户现有系统使用情况、竞品使用情况\n2、判断匹配度\n3、明确关键部门及其关键人\n4、明确客户是否有对应预算",
        "售前关键动作": "",
        "客户支持行为": "1. 交流中客户较为开放，能告知需求，计划较为清晰;\n2. 愿意进一步需求沟通;\n3. 交流有多人甚至有多部门参与讨论;",
        "阶段转化标准": "1.客户有需求\n2.有明确的项目联系人"
    },
    {
        "销售阶段名称": "02-evaluation",
        "客户采购行为": "",
        "销售阶段任务": "收集客户信息，了解客户内部预算情况、预期的项目落地时间、产品和数量等，判断商机可靠性；组织技术交流，讲解公司解决方案，传递公司价值",
        "关键获取信息": "1、整理需求确认文档，客户确认\n2.在CRM录入组织架构，明确决策链和决策人\n3.预算是否完成申批\n4.是否进PCC\n5.PCC是否已申批:6.PcC状态\n7.测试类型\n8.测试项（用例）",
        "销售关键动作": "1、整理需求确认文档，客户确认\n2、在CRM录入组织架构，明确决策链和决策人\n3、了解决策链的每个客户动力;\n4.发展线人\n5、组织技术交流，传递公司及产品价值，引导客户的场景和我们的特性结合\n6、组织技术交流，了解预期的项目落地时间、产品和数量等\n7.和客户确认是否需要测试\n8、对客户提出的测试需求进行评估，确定需求我们优势够，决定是否跟进测试",
        "售前关键动作": "",
        "客户支持行为": "1.愿意透露决策链信息，预算信息，友商信息，时间信息。\n2. 能介绍高title的人\n3. 客户有对我们产品的测试计划;",
        "阶段转化标准": "1.客户有预算\n2.有明确的项目时间\n3.有预期的产品和数量"
    },
    {
        "销售阶段名称": "03-qualification",
        "客户采购行为": "",
        "销售阶段任务": "收集、确认项目立项信息，明确产品和数量；\n组织测试必要性并引导客户做poc测试，验证应用场景和技术适用性、平鼎成功入围",
        "关键获取信息": "1.立项批复\n2.立项时间\n3.立项金额\n（立项报告的内容）\n4.招标方式",
        "销售关键动作": "1、和客户确认是否需要测试\n2、对客户提出的测试需求进行评估，确定需求我们优势够，决定是否跟进测试\n3、引导客户的测试方案制定，引导将我们优势点，加入到测试方案中，如：性能、扩展性、边界\n4、在公司内部组织测试资源\n5、获取客户内部的测试报告，了解真实的测试结论\n6、了解客户对测试结果的态度和对手情况\n7、做测试正式汇报，和客户达成一致",
        "售前关键动作": "",
        "客户支持行为": "1.支持对我方有利的测试方案\n2. 提供内部真实的测试报告\n3.决策链人员认同测试效果，客户愿意引荐更高层领导汇报\n4.双方沟通项目计划且达成一致\n5.主动邀请提供招标参数或汇报材料",
        "阶段转化标准": "1.项目预算批准、项目已立项\n2.有确定产品和数量、或\n3.完成场景应用/技术适用性验证、客户确定平鼎入围（完成poc）"
    },
    {
        "销售阶段名称": "04-bidding/negotiating",
        "客户采购行为": "",
        "销售阶段任务": "确认项目是否需要招标，提前影响招投标结果并赢得标书；若不需要招标，则完成商务谈判，确认价格和产品可交付沟通与评审",
        "关键获取信息": "1.是否投标\n2.发标时间\n3.投标时间\n4.竞争对手\n5.对手产配置\n6.对手投标金额",
        "销售关键动作": "1.制定关单策略及竞争策略\n2.控制立项报告（对对手不利的参数）\n3.如果无法控制立项，制定应对策略\n4.创造机会与高层沟通汇报\n5.沟通交付计划及SOW\n6. 确定关键联系人",
        "售前关键动作": "",
        "客户支持行为": "1.反馈客户内部的进展和计划\n2. 客户内部立项成功\n3.采纳我们提交的标参数（或有利于我方）\n3. 对黑马和灰犀牛的处理，愿意提供应对处理",
        "阶段转化标准": "1.完成可交付评审；\n2.投标通过审批;\n3.投标结果确认赢标或完成商务谈判，确定价格和产品"
    },
    {
        "销售阶段名称": "05-contract review",
        "客户采购行为": "",
        "销售阶段任务": "发起合同协议审批申请，确认合同条款",
        "关键获取信息": "无",
        "销售关键动作": "",
        "售前关键动作": "",
        "客户支持行为": "",
        "阶段转化标准": "合同评审通过，完成合同协商审批，确认合同条款"
    },
    {
        "销售阶段名称": "06-closed won",
        "客户采购行为": "",
        "销售阶段任务": "合同归档，项目赢单",
        "关键获取信息": "无",
        "销售关键动作": "",
        "售前关键动作": "",
        "客户支持行为": "",
        "阶段转化标准": "合同归档"
    },
    {
        "销售阶段名称": "06-closed cancel",
        "客户采购行为": "确认项目取消原因",
        "销售阶段任务": "复盘项目输单原因",
        "关键获取信息": "取消原因",
        "销售关键动作": "",
        "售前关键动作": "",
        "客户支持行为": "",
        "阶段转化标准": "1.客户明确表示取消项目\n2.投标确认状态为输单"
    }
]

pro_sales_stage_definition = """
1. 01-prospecting:
   - 销售阶段任务: 了解客户信息、与客户进行交流，初步了解客户需求，并确定项目对接人，进入客户供应商名单
   - 销售关键动作: 1、了解客户组织架构，了解客户现有系统使用情况、竞品使用情况 2、判断匹配度 3、明确关键部门及其关键人 4、明确客户是否有对应预算
   - 阶段转化标准: 1.客户有需求 2.有明确的项目联系人

2. 02-evaluation:
   - 销售阶段任务: 收集客户信息，了解客户内部预算情况、预期的项目落地时间、产品和数量等，判断商机可靠性；组织技术交流，讲解公司解决方案，传递公司价值
   - 销售关键动作: 1、整理需求确认文档，客户确认 2、在CRM录入组织架构，明确决策链和决策人 3、了解决策链的每个客户动力; 4.发展线人 5、组织技术交流，传递公司及产品价值，引导客户的场景和我们的特性结合 6、组织技术交流，了解预期的项目落地时间、产品和数量等 7.和客户确认是否需要测试 8、对客户提出的测试需求进行评估，确定需求我们优势够，决定是否跟进测试
   - 阶段转化标准: 1.客户有预算 2.有明确的项目时间 3.有预期的产品和数量

3. 03-qualification:
   - 销售阶段任务: 收集、确认项目立项信息，明确产品和数量；组织测试必要性并引导客户做poc测试，验证应用场景和技术适用性、平鼎成功入围
   - 销售关键动作: 1、和客户确认是否需要测试 2、对客户提出的测试需求进行评估，确定需求我们优势够，决定是否跟进测试 3、引导客户的测试方案制定，引导将我们优势点，加入到测试方案中，如：性能、扩展性、边界 4、在公司内部组织测试资源 5、获取客户内部的测试报告，了解真实的测试结论 6、了解客户对测试结果的态度和对手情况 7、做测试正式汇报，和客户达成一致
   - 阶段转化标准: 1.项目预算批准、项目已立项 2.有确定产品和数量、或 3.完成场景应用/技术适用性验证、客户确定平鼎入围（完成poc）

4. 04-bidding/negotiating:
   - 销售阶段任务: 确认项目是否需要招标，提前影响招投标结果并赢得标书；若不需要招标，则完成商务谈判，确认价格和产品可交付沟通与评审
   - 销售关键动作: 1.制定关单策略及竞争策略 2.控制立项报告（对对手不利的参数） 3.如果无法控制立项，制定应对策略 4.创造机会与高层沟通汇报 5.沟通交付计划及SOW 6. 确定关键联系人
   - 阶段转化标准: 1.完成可交付评审； 2.投标通过审批; 3.投标结果确认赢标或完成商务谈判，确定价格和产品

5. 05-contract review:
   - 销售阶段任务: 发起合同协议审批申请，确认合同条款
   - 销售关键动作: 
   - 阶段转化标准: 合同评审通过，完成合同协商审批，确认合同条款

6. 06-closed won:
   - 销售阶段任务: 合同归档，项目赢单
   - 销售关键动作: 
   - 阶段转化标准: 合同归档

7. 06-closed cancel:
   - 销售阶段任务: 复盘项目输单原因
   - 销售关键动作: 
   - 阶段转化标准: 1.客户明确表示取消项目 2.投标确认状态为输单
"""


# Read the Excel file
df = pd.read_excel('./data_intermediate/pingcap_pipeline_top_sales.xlsx')

# Iterate over each row in the DataFrame
for index, row in df.iterrows():
    # Extract the information from the column "当前详细状态及Close节奏"

    try:
        detailed_status = row['当前详细状态及Close节奏']
        print(f"Processing row {index} at current time: {datetime.now()}")
        detailed_current_stage = row['Sales stage']
        prompt = (f"某公司当前销售定义为 {sales_stage_definition}, "
        f"当前销售阶段为 {detailed_current_stage}, "
        f"销售人员填写的销售动作日志为: {detailed_status} , "
        f"请分析当前销售阶段以及销售动作日志，判断其销售动作是否完成了前一阶段的准出标准，以及是否支持将销售阶段转化到当前阶段{detailed_current_stage}，按照如下要点给出分析："
        f"1. **销售阶段分析**"
        f"2. **销售动作日志分析**"
        f"3. **销售动作与销售阶段的关系**"
        f"4. **判断结果**"
        f"5. **销售阶段分析报告**")
        analysis_result = agent.send_message(prompt)
        print(analysis_result)
        df.at[index, '分析结果'] = analysis_result  # Directly update the DataFrame

        prompt_sales_action_analysis = (f"某公司当前销售定义为 {pro_sales_stage_definition}, "
        f"当前销售阶段为 {detailed_current_stage}, "
        f"销售人员填写的销售动作日志为: {detailed_status} , "
        f"请分析当前销售阶段以及销售动作日志，分析、总结、提炼出销售动作，给出一个概括的销售动作列表，比如拜访客户，需求讨论这种形式的动作描述")
        sales_action_analysis_result = agent.send_message(prompt_sales_action_analysis)
        print(sales_action_analysis_result)
        df.at[index, '销售动作分析'] = sales_action_analysis_result  # Directly update the DataFrame
    except Exception as e:
        print(f"Error processing row {index}: {e}")
        df.at[index, '分析结果'] = f"Error: {e}"  # Log the error in the DataFrame
        df.at[index, '销售动作分析'] = f"Error: {e}"  # Log the error in the DataFrame


df.to_excel('./data_output/analysis_result_top_sales.xlsx', index=False)

