# -*- encoding:utf-8 -*-
import json

from flask_app.general.json_utils import clean_json_string
from flask_app.general.商务技术评分提取 import combine_technical_and_business
from flask_app.general.llm.通义千问long import upload_file, qianwen_long

def combine_evaluation_standards(evaluation_method):
    # 商务标、技术标评分项：千问
    file_id = upload_file(evaluation_method)
    # user_query_2 = (
    #     "根据该文档中的评标办法前附表，请你列出该文件的技术评分，商务评分，投标报价评审标准以及它们对应的具体评分要求，若对应内容中存在其他信息，在键名如'技术评分'中新增子键名'备注'存放该信息。如果评分内容（因素）不是这3个，则返回文档中给定的评分内容（因素）以及它的评分要求。请以json格式返回结果，不要回答有关形式、资格、响应性评审标准的内容")
    user_query_2 = (
           """
你是一个对招投标业务非常熟悉的专家。根据该文档中的评标办法表格，请你列出该文件的技术评分，商务评分，投标报价评分以及它们对应的具体评分要求，请以JSON格式返回结果。
格式要求：
    请以 JSON 格式返回结果，最外层键名为 '技术评分'、'商务评分' 和 '投标报价评分'。在每大项下，用键值对表示具体评分项，键为具体的评审因素，若评审因素存在嵌套（表格中存在层级），请使用嵌套键值对表示，外层键名为主评审因素，嵌套的子评审因素作为内层键名，最内键值为列表，列表中包含描述评分及要求的字典。每个字典的键包括：
        '评分'：具体得分或定性指标（如 '合格制'），无评分时可删去'评分'键值对。
        '要求'：说明评分标准。
    若这三大项评分中存在额外信息（不属于某个评审因素，即该大项评分的整体要求），在该评分项内部新增键名为'备注' ，值为该要求；请勿擅自添加不属于'评审因素'的键名。

要求与指南：
    1. 请首先定位评分细则的表格，不要回答有关资格审查的内容，也不要从评标办法正文中提取回答
    2. 你无需将表格的单元格内的内容进行拆分，需要将它视为一个整体
    3. '评分'的键值不能是一个范围数字，如'0-5分'，应该是一个具体数字，如'5分'，或者是一个定性的指标如'合格制'
    4. 如果该招标活动有多个包，则最外层键名为对应的包名,否则最外层键名为各大评分项
    5. 若表格中商务和技术评分混合一起，请你手动将它们区别，商务评分通常包含'售后服务'、'质量保证'、'业绩'、'企业人员'、'企业信用'等商务因素。
    6. 若表中的评分大项不是这三个，请你根据语义分别映射到'技术评分'、'商务评分'、'投标报价评分'，而不必严格按照表格中的名称，若大项的'xx评分'要求未在文中说明，则键名'xx评分'的键值设为'本项目无xx评分项'，例如"技术评分":"本项目无技术评分项" 

以下为示例输出，仅供格式参考：
    {
        "一包": {
            "技术评分": {
                "实施方案":{
                    "总体实施方案":[
                        {
                            "评分":8,
                            "要求":"根据投标人总体实施方案进行评分"
                        }
                    ],
                    "项目实施要点":[
                        {
                            "评分":8,
                            "要求":"根据投标人对项目实施要点、难点进行评分"
                        }
                    ]
                },
                "主要监理岗位的职责": [
                    {
                        "评分": "4分",
                        "要求": "1、总监理工程师的职责全面、清晰、合理得 1.2-2分；一般的1.2分。2、其他主要监理人员及岗位的职责全面、清晰、合理得 1.2-2分；一般的 1.2分。"
                    }
                ],
                "备注": "技术标采用定性方式评审的， “不合格”仅限于投标文件出现违反国家强制性条文标准的情况，否则技术标评审结论为“合格” 。"
            },
            "商务评分": {
                "控制系统内主板": [
                    {
                        "评分": "10分",
                        "要求": "所投电梯控制系统内主板为制造商原厂原品牌制造生产且为进口部件得 10分。（提供进口部件报关单及原产地证明扫描件加盖公章，否则不得分）"
                    }
                ],
                "制造商技术实力": [
                    {
                        "评分": "3分",
                        "要求": "一级证书得3分，二级证书得1分，其他不得分"
                    },
                    {
                        "评分": "2分",
                        "要求": "行业销量排名连续前 2 名，得 2 分，第 4-6 名得 0.5 分，其他不得分"
                    }
                ]
            },
            "投标报价评分": {
                "投标报价是否出现违反计价规范": [
                    {
                        "评分": "合格制",
                        "要求": "A:投标报价未违反计价规范的，评审意见为“合格”；B：投标报价违反计价规范的，评审意见为“不合格”"
                    }
                ]
            }
        }
    }
                """
           )

    evaluation_res = qianwen_long(file_id, user_query_2)
    # print(evaluation_res)
    update_json = combine_technical_and_business(clean_json_string(evaluation_res))
    return update_json              #商务标技术标整合
if __name__ == "__main__":
    # evaluation_method="C:\\Users\\Administrator\\Desktop\\招标文件\\output2\\zbtest3_evaluation_method.pdf"
    evaluation_method=r'C:\Users\Administrator\Desktop\招标文件\output2\zbtest7_evaluation_method.pdf'
    # evaluation_method= r"C:\Users\Administrator\Desktop\new招标文件\output2\gcHBDL-2024-0017-001-招标文件_evaluation_method.pdf"
    evaluation_standards_res=combine_evaluation_standards(evaluation_method)
    # 从结果中提取"商务标"和"技术标"
    technical_standards = {"技术评分": evaluation_standards_res.get("技术评分", {})}
    commercial_standards = {"商务评分": evaluation_standards_res.get("商务评分", {})}
    # 返回技术标和商务标
    print(json.dumps(technical_standards,ensure_ascii=False,indent=4))
    print(json.dumps(commercial_standards, ensure_ascii=False, indent=4))