# flask_app/routes/test_zbparse.py

from flask import Blueprint, Response, stream_with_context, current_app, jsonify
import json
import time

from flask_app.routes.utils import validate_and_setup_logger

test_zbparse_bp = Blueprint('test_zbparse', __name__)

@test_zbparse_bp.route('/api/test_zbparse', methods=['POST'])
@validate_and_setup_logger
def test_zbparse():
    try:
        return Response(stream_with_context(test_process_and_stream()), content_type='text/event-stream')
    except Exception as e:
        # 使用 Flask 应用的日志记录器
        current_app.logger.error('Exception occurred: ' + str(e))
        return jsonify({'error': str(e)}), 500

def test_process_and_stream():
    data_segments = [
        {
            "base_info": {
                "基础信息": {
                    "project_name": "测试项目1",
                    "project_code": "TP001",
                    "project_manager": "张三",
                    "start_date": "2024-01-10",
                    "end_date": "2024-12-31"
                }
            }
        },
        {
            "qualification_review": {
                "资格审查": {
                    "review_criteria": ["公司资质", "过往业绩", "财务报表"],
                    "required_documents": ["营业执照", "资质证书", "近三年财务报告"],
                    "minimum_requirements": {
                        "company_age": "至少5年",
                        "past_projects": "至少3个大型项目"
                    }
                }
            }
        },
        {
            "technical_standards": {
                "技术标": {
                    "technical_requirements": ["设备质量要求", "施工工艺", "安全标准"],
                    "materials_list": ["钢筋", "水泥", "电缆"],
                    "equipment_specs": {
                        "excavator": "型号X123",
                        "concrete_mixer": "型号Y456"
                    }
                }
            }
        },
        {
            "commercial_standards": {
                "商务标": {
                    "pricing_method": "固定总价",
                    "payment_schedule": ["30%合同签订", "40%中期支付", "30%项目完成支付"],
                    "contract_conditions": {
                        "warranty_period": "2年",
                        "penalty_clauses": "延期每周罚款5%"
                    }
                }
            }
        },
        {
            "invalid_requirements": {
                "无效标与废标项": {
                    "common_issues": ["未按要求提交保证金", "技术标不达标"],
                    "invalidation_reasons": {
                        "missing_documents": "缺少必要文件",
                        "unqualified_technical_specs": "技术规格不合要求"
                    }
                }
            }
        },
        {
            "bidding_documents_requirements": {
                "投标文件要求": {
                    "file_format": "PDF",
                    "submission_deadline": "2024-08-01 17:00",
                    "submission_location": "北京市某某大厦5楼",
                    "required_sections": ["公司简介", "技术方案", "商务报价"]
                }
            }
        },
        {
            "opening_bid": {
                "开评定标流程": {
                    "bid_opening_time": "2024-09-01 10:00",
                    "location": "会议室A",
                    "evaluation_criteria": ["价格", "技术能力", "项目经验"],
                    "evaluation_process": {
                        "first_round": "资格审查",
                        "second_round": "技术评分",
                        "final_round": "商务报价评定"
                    }
                }
            }
        }
    ]

    filename = "test_file.pdf"

    for i, data in enumerate(data_segments, 1):
        response = {
            'message': f'Processing segment {i}',
            'filename': filename,
            'data': data
        }
        yield f"data: {json.dumps(response, ensure_ascii=False)}\n\n"
        time.sleep(3)  # 每隔3秒发送一段数据

    combined_data = {}
    for segment in data_segments:
        for outer_key, inner_dict in segment.items():
            inner_key, inner_value = next(iter(inner_dict.items()))
            combined_data[inner_key] = inner_value

    procurement_reqs = {
        "采购项目": "混凝土",
        "数量": "500立方米",
        "规格": "C30"
    }
    tech_deviation_response = {
        'message': 'procurement_reqs',
        'filename': filename,
        'data': json.dumps(procurement_reqs, ensure_ascii=False)
    }

    zige_deviation_table = {
        "资格性检查": ["具有独立承担民事责任的能力；", "具有良好的商业信誉和健全的财务会计制度；",
                       "具有履行合同所必需的设备和专业技术能力；", "有依法缴纳税收和社会保障资金的良好记录；",
                       "参加政府采购活动前三年内，在经营活动中没有重大违法记录；"]
    }
    fuhe_deviation_table = {
        "符合性检查": ["符合竞争性磋商文件第一部分竞争性磋商公告“六、其它补充事宜”第 1、2 条要求。",
                       "响应性文件签字和盖章齐全。", "满足磋商有效期。",
                       "供应商所提交的报价表未出现两个或两个以上不同报价。"]
    }
    shangwu_deviation_table = {
        "商务要求偏离表": ["交货期（工期）：合同签订之日起 15 个日历天内完成，并通过项目验收。", "采购人指定地点",
                           "本项目报价须为固定总价，包含但不限于：采购、实施、调试、试运行、验收、运维等所有完成本项目相关的一切费用。",
                           "项目质保期为一年，服务内容包括项目所有硬件和软件，质保期自项目验收合格后起算。",
                           "中标人在合同约定时间内完成所供货物的安装集成并投入正常使用，经采购人组织验收(终验)合格后，按合同约定及相关规定支付货款。"]
    }
    shangwu_star_deviation_table = {
        "商务带星要求偏离表": ["交货期（工期）：合同签订之日起 15 个日历天内完成，并通过项目验收。", "采购人指定地点",
                               "本项目报价须为固定总价，包含但不限于：采购、实施、调试、试运行、验收、运维等所有完成本项目相关的一切费用。",
                               "项目质保期为一年，服务内容包括项目所有硬件和软件，质保期自项目验收合格后起算。",
                               "中标人在合同约定时间内完成所供货物的安装集成并投入正常使用，经采购人组织验收(终验)合格后，按合同约定及相关规定支付货款。"]
    }
    jishu_star_deviation_table = {
        "高清数字枪机": ["6、▲补光距离:红外光最远可达 30 m，白光最远可达 30 m", "▲音频: 1个内置麦克风"],
        "高清数字半球机": ["▲音频:内置 1个麦克风", "▲供电方式: DC：12 V ± 25%，支持防反接保护; PoE： 802.3af，Class 3"],
        "网络硬盘录像机": ["▲可接入 1T、2T、3T、4T、6T、8T、10T、12TB、14TB、16TB、 18TB、20TB容量的 SATA接口硬盘；",
                           "▲样机可在预览界面随意选择一个或多个通道，在预警面板实 时展示此通道的目标抓拍信息，包括：事件名称、事件触发时间、 人脸抓图；针对人脸比对同时显示姓名、相似度；针对车辆报警 同时显示车牌；针对人体和车辆目标，可分别显示“人体”、“车 辆”。",
                           "▲具有存储安全保障功能，当存储压力过高或硬盘出现性能 不足时，可优先录像业务存储；"]
    }

    zigefuhe_deviation_response = {
        'message': 'zigefuhe_deviation',
        'filename': filename,
        'data': json.dumps(zige_deviation_table, ensure_ascii=False)
    }
    shangwu_deviation_response = {
        'message': 'shangwu_deviation',
        'filename': filename,
        'data': json.dumps(shangwu_deviation_table, ensure_ascii=False)
    }
    shangwu_star_deviation_response = {
        'message': 'shangwu_star_deviation',
        'filename': filename,
        'data': json.dumps(shangwu_star_deviation_table, ensure_ascii=False)
    }
    jishu_star_deviation_response = {
        'message': 'jishu_star_deviation',
        'filename': filename,
        'data': json.dumps(jishu_star_deviation_table, ensure_ascii=False)
    }

    yield f"data:{json.dumps(zigefuhe_deviation_response, ensure_ascii=False)}\n\n"
    yield f"data:{json.dumps(shangwu_deviation_response, ensure_ascii=False)}\n\n"
    yield f"data:{json.dumps(shangwu_star_deviation_response, ensure_ascii=False)}\n\n"
    yield f"data:{json.dumps(jishu_star_deviation_response, ensure_ascii=False)}\n\n"
    yield f"data: {json.dumps(tech_deviation_response, ensure_ascii=False)}\n\n"

    complete_response = {
        'message': 'Combined data',
        'filename': filename,
        'data': combined_data
    }
    yield f"data: {json.dumps(complete_response, ensure_ascii=False)}\n\n"

    final_response = {
        'message': 'File processed successfully',
        'filename': filename,
        'data': 'END'
    }
    yield f"data: {json.dumps(final_response, ensure_ascii=False)}\n\n"
