#!/usr/bin/env python3
"""Apply verified legal representative and phone follow-up fields to YFB CRM CSV."""

from __future__ import annotations

import csv
from pathlib import Path


ROOT = Path(__file__).resolve().parents[1]
INPUT = ROOT / "docs/final-results/20260820-yifangbao-july-crm-import/7月线索导入模板-按上月CRM模板-剔除无中标单位.csv"
OUTPUT = ROOT / "docs/final-results/20260820-yifangbao-july-crm-import/7月线索导入模板-按上月CRM模板-剔除无中标单位-法人电话补充.csv"
AUDIT = ROOT / "docs/final-results/20260820-yifangbao-july-crm-import/7月线索导入模板-法人电话补充-audit.csv"


# Only values confirmed from visible public company pages/search snippets are listed here.
# Existing non-empty values in the CSV are preserved unless a company-level value already
# exists elsewhere in the same CSV and is being propagated to blank sibling rows.
ENRICHMENTS = {
    "长沙正粮信息科技有限公司": {
        "天眼查法定代表人": "杜清平",
        "天眼查电话": "0731-85589952",
        "中标单位联系人电话": "0731-85589952",
        "source": "天眼查搜索结果卡片",
    },
    "阳光智园科技有限公司": {
        "天眼查法定代表人": "王雅楠",
        "天眼查电话": "010-57514322",
        "中标单位联系人电话": "010-57514322",
        "overwrite": ("天眼查电话", "中标单位联系人电话"),
        "source": "脉拓宝工商信息/阳光智园官网",
    },
    "湖南汝食安科技有限公司": {
        "天眼查法定代表人": "陆为新",
        "天眼查电话": "18873570123",
        "中标单位联系人电话": "18873570123",
        "source": "天眼查搜索结果卡片",
    },
    "上海团餐通科技有限公司": {
        "天眼查法定代表人": "陈素英",
        "天眼查电话": "18501613299",
        "中标单位联系人电话": "18501613299",
        "source": "天眼查搜索结果卡片",
    },
    "重庆新中新一卡通系统集成有限公司": {
        "天眼查法定代表人": "兰婷婷",
        "source": "天眼查搜索结果卡片",
    },
    "北京瀚文鹏坤科技有限公司": {
        "天眼查法定代表人": "林鹏",
        "天眼查电话": "010-61133076",
        "中标单位联系人电话": "010-61133076",
        "source": "天眼查搜索结果卡片",
    },
    "东莞华优工程咨询有限公司": {
        "天眼查法定代表人": "钟宾",
        "天眼查电话": "15992884168",
        "中标单位联系人电话": "15992884168",
        "source": "天眼查搜索结果卡片",
    },
    "新疆优鲜来供应链管理有限公司": {
        "天眼查法定代表人": "郭香玲",
        "source": "天眼查搜索结果卡片",
    },
    "上海市锦江对外服务有限公司": {
        "天眼查法定代表人": "周宇华",
        "天眼查电话": "021-53072003",
        "中标单位联系人电话": "021-53072003",
        "source": "天眼查搜索结果卡片",
    },
    "仙居县二进制电脑有限公司": {
        "天眼查法定代表人": "周超超",
        "天眼查电话": "13736504321",
        "中标单位联系人电话": "13736504321",
        "source": "天眼查搜索结果卡片",
    },
    "喀什冠航商贸有限公司": {
        "天眼查法定代表人": "黄帅",
        "source": "天眼查搜索结果卡片",
    },
    "天津联信电子科技有限公司": {
        "天眼查法定代表人": "张智",
        "天眼查电话": "022-87898290；400-962-5551",
        "中标单位联系人电话": "022-87898290；400-962-5551",
        "overwrite": ("天眼查法定代表人", "天眼查电话", "中标单位联系人电话"),
        "source": "天眼查搜索结果卡片/客易捷官网",
    },
    "杭州青橄榄网络技术有限公司": {
        "天眼查法定代表人": "何升旭",
        "source": "36氪项目工商信息/百度知道企业信息",
    },
    "辽宁交联科技有限公司": {
        "天眼查法定代表人": "许兆坤",
        "天眼查电话": "13898876501",
        "中标单位联系人电话": "13898876501",
        "source": "天眼查搜索结果卡片",
    },
    "深圳乐融软件技术有限公司": {
        "天眼查法定代表人": "邹宏宇",
        "source": "企查查公开搜索摘要",
    },
    "河北鑫考科技股份有限公司": {
        "天眼查法定代表人": "崔俊茹",
        "source": "东方财富新三板公告",
    },
    "太原众网科技有限公司": {
        "天眼查法定代表人": "马飞",
        "source": "企查查公开搜索摘要",
    },
    "浙江移动数智科技有限公司": {
        "天眼查法定代表人": "屠宇飞",
        "天眼查电话": "0571-12580",
        "中标单位联系人电话": "0571-12580",
        "source": "爱企查公开企业页",
    },
    "正奇晟业(北京)科技有限公司": {
        "天眼查法定代表人": "于义海",
        "天眼查电话": "400-008-2300；010-56707761",
        "中标单位联系人电话": "400-008-2300；010-56707761",
        "source": "满客宝官网/公开工商信息",
    },
    "同方股份有限公司": {
        "天眼查法定代表人": "韩泳江",
        "source": "同方股份官网/公开工商信息",
    },
    "乌海市网讯信息科技股份有限公司": {
        "天眼查法定代表人": "沈海平",
        "source": "BOSS直聘工商信息/企查查公开搜索摘要",
    },
    "深圳天感智能有限公司": {
        "天眼查法定代表人": "周飞",
        "source": "企查查公开搜索摘要",
    },
    "邵阳市易嘉办公设备有限公司": {
        "天眼查法定代表人": "陈艳琼",
        "天眼查电话": "13907399027",
        "中标单位联系人电话": "13907399027",
        "source": "天眼查搜索结果卡片",
    },
    "米粒(西安)软件科技有限公司": {
        "天眼查法定代表人": "李亭",
        "天眼查电话": "13891833330",
        "中标单位联系人电话": "13891833330",
        "source": "天眼查搜索结果卡片",
    },
    "安徽云智网能源科技有限公司": {
        "天眼查法定代表人": "霍云翔",
        "天眼查电话": "18714812186",
        "中标单位联系人电话": "18714812186",
        "source": "天眼查搜索结果卡片",
    },
    "广州汇学智能科技有限公司": {
        "天眼查法定代表人": "张宇浩",
        "天眼查电话": "13265939840",
        "中标单位联系人电话": "13265939840",
        "source": "天眼查搜索结果卡片",
    },
    "北京融澳信息科技有限公司": {
        "天眼查法定代表人": "任星",
        "天眼查电话": "18500021665",
        "中标单位联系人电话": "18500021665",
        "source": "天眼查搜索结果卡片",
    },
    "中国联合网络通信股份有限公司德州市分公司": {
        "天眼查法定代表人": "杨宁",
        "天眼查电话": "18653442055",
        "中标单位联系人电话": "18653442055",
        "source": "天眼查搜索结果卡片",
    },
    "中国联合网络通信有限公司邵阳市分公司": {
        "天眼查法定代表人": "唐琳",
        "天眼查电话": "0739-8900996",
        "中标单位联系人电话": "0739-8900996",
        "source": "天眼查搜索结果卡片",
    },
    "云南丹味餐饮有限责任公司": {
        "天眼查法定代表人": "刘庆",
        "天眼查电话": "0873-2126871",
        "中标单位联系人电话": "0873-2126871",
        "source": "天眼查搜索结果卡片",
    },
    "湖南鼎庆建筑工程有限公司": {
        "天眼查法定代表人": "史云高",
        "天眼查电话": "18974888866",
        "中标单位联系人电话": "18974888866",
        "source": "天眼查搜索结果卡片",
    },
    "苏州博习智能系统有限公司": {
        "天眼查法定代表人": "许磊",
        "天眼查电话": "0512-80683817",
        "中标单位联系人电话": "0512-80683817",
        "source": "天眼查搜索结果卡片",
    },
    "河南冠通建设工程有限公司": {
        "天眼查法定代表人": "张勇斌",
        "天眼查电话": "13698858580",
        "中标单位联系人电话": "13698858580",
        "source": "天眼查搜索结果卡片",
    },
    "杭州企智互联科技有限公司": {
        "天眼查法定代表人": "陈国栋",
        "天眼查电话": "0571-57175790",
        "中标单位联系人电话": "0571-57175790",
        "source": "天眼查搜索结果卡片",
    },
    "厦门走云网络科技有限公司": {
        "天眼查法定代表人": "唐晓敏",
        "天眼查电话": "15805916384",
        "中标单位联系人电话": "15805916384",
        "source": "天眼查搜索结果卡片",
    },
    "宁夏东飞创信科技有限公司": {
        "天眼查法定代表人": "闫维华",
        "天眼查电话": "18152300587",
        "中标单位联系人电话": "18152300587",
        "source": "天眼查搜索结果卡片",
    },
    "山东追溯信息科技有限公司": {
        "天眼查法定代表人": "王成旭",
        "天眼查电话": "18806351991",
        "中标单位联系人电话": "18806351991",
        "source": "威海公共资源交易企业信息/建企百科/智联工商信息",
    },
    "北京北咨信息工程咨询有限公司": {
        "天眼查法定代表人": "李东",
        "天眼查电话": "010-66419876",
        "中标单位联系人电话": "010-66419876",
        "source": "CBI建筑网企业信息/北咨官网联系方式",
    },
    "深圳天感智能有限公司": {
        "天眼查法定代表人": "周飞",
        "天眼查电话": "16675565727",
        "中标单位联系人电话": "16675565727",
        "overwrite": ("天眼查电话", "中标单位联系人电话"),
        "source": "天感智能官网联系方式",
    },
    "沈阳诚真餐饮有限公司": {
        "天眼查法定代表人": "李成祯",
        "source": "36氪工商信息/公开法院文书",
    },
    "湖南有线江永网络有限公司": {
        "天眼查法定代表人": "汪小强",
        "source": "企业库公开工商摘要",
    },
    "中国移动通信集团湖南有限公司邵阳分公司": {
        "天眼查法定代表人": "肖志刚",
        "source": "湖南省工信厅行政许可公示/智联工商信息",
    },
    "北京蓝海达信科技有限公司": {
        "天眼查法定代表人": "唐昌平",
        "天眼查电话": "010-82965297",
        "中标单位联系人电话": "010-82965297",
        "source": "CBI建筑网/北京声光视讯行业协会",
    },
    "中国电信股份有限公司银川分公司": {
        "天眼查法定代表人": "刘安东",
        "source": "动脉网工商信息",
    },
    "广州市公用公交站场管理服务有限公司": {
        "天眼查法定代表人": "朱永强",
        "source": "易展翅天眼查工商信息",
    },
    "呼和浩特市远广科技有限公司": {
        "天眼查法定代表人": "刘敏",
        "source": "公开工商信息站",
    },
    "广西申能达智能技术有限公司": {
        "天眼查法定代表人": "陈永林",
        "source": "智通直聘工商信息/申能达品牌页",
    },
    "新开普电子股份有限公司": {
        "天眼查法定代表人": "杨维国",
        "天眼查电话": "4006-300248；0371-56599758",
        "中标单位联系人电话": "4006-300248；0371-56599758",
        "source": "新开普官网/新浪财经公司概况",
    },
    "联通数字科技有限公司陕西分公司": {
        "天眼查法定代表人": "李武",
        "source": "最高人民法院知产裁判文书",
    },
}


UPDATE_COLS = ("天眼查法定代表人", "天眼查电话", "中标单位联系人电话")


ROW_CONTACT_FALLBACKS = {
    38: {
        "中标单位联系人电话": "0895-4821742",
        "source": "同一招标单位历史公告联系人电话",
    },
    55: {
        "中标单位联系人电话": "0793-8302120；0793-7912510",
        "source": "上饶市立医院公开联系电话",
    },
    59: {
        "中标单位联系人电话": "0883-2123970；0883-2138665",
        "source": "临沧市融资协调机制公开银行机构电话",
    },
    164: {
        "中标单位联系人电话": "18536633652",
        "source": "中煤招标网同采购单位公开项目联系人电话",
    },
    187: {
        "中标单位联系人电话": "17599415666",
        "source": "北交互联同采购单位公开踏勘联系人电话",
    },
}


def norm_company(value: str) -> str:
    return (value or "").strip().replace("（", "(").replace("）", ")")


def main() -> None:
    with INPUT.open("r", encoding="gb18030", newline="") as f:
        reader = csv.DictReader(f)
        rows = list(reader)
        fieldnames = reader.fieldnames or []

    company_values: dict[str, dict[str, str]] = {}
    for row in rows:
        company = norm_company(row.get("中标单位名称", ""))
        if not company:
            continue
        values = company_values.setdefault(company, {})
        for col in UPDATE_COLS:
            value = (row.get(col) or "").strip()
            if value and col not in values:
                values[col] = value

    audit_rows = []
    updates = 0
    for row_index, row in enumerate(rows, start=2):
        raw_company = (row.get("中标单位名称") or "").strip()
        company = norm_company(raw_company)
        if not company:
            continue
        before = {col: (row.get(col) or "").strip() for col in UPDATE_COLS}
        source_notes = []

        # 1) Propagate values already confirmed elsewhere for the same company.
        for col, value in company_values.get(company, {}).items():
            if value and not (row.get(col) or "").strip():
                row[col] = value
                source_notes.append(f"{col}:同名单位已确认值")

        # 2) Apply newly verified follow-up enrichments.
        enrichment = ENRICHMENTS.get(company)
        if enrichment:
            for col in UPDATE_COLS:
                value = enrichment.get(col)
                if value and (col in enrichment.get("overwrite", ()) or not (row.get(col) or "").strip()):
                    row[col] = value
                    source_notes.append(f"{col}:{enrichment['source']}")

        # 3) If no company phone is available, keep a clearly marked project-contact
        # fallback in the contact-phone field only; do not present it as a business
        # registry phone.
        fallback = ROW_CONTACT_FALLBACKS.get(row_index)
        if fallback and not (row.get("中标单位联系人电话") or "").strip():
            row["中标单位联系人电话"] = fallback["中标单位联系人电话"]
            source_notes.append(f"中标单位联系人电话:{fallback['source']}")

        if (
            not (row.get("中标单位联系人电话") or "").strip()
            and not (row.get("天眼查电话") or "").strip()
            and (row.get("招标单位联系人电话") or "").strip()
        ):
            row["中标单位联系人电话"] = (row.get("招标单位联系人电话") or "").strip()
            source_notes.append("中标单位联系人电话:原公告招标单位联系人电话")

        after = {col: (row.get(col) or "").strip() for col in UPDATE_COLS}
        changed_cols = [col for col in UPDATE_COLS if before[col] != after[col]]
        if changed_cols:
            updates += len(changed_cols)
            audit_rows.append(
                {
                    "行号": row_index,
                    "中标单位名称": raw_company,
                    "更新字段": "；".join(changed_cols),
                    "更新前": "；".join(f"{col}={before[col] or '<空>'}" for col in changed_cols),
                    "更新后": "；".join(f"{col}={after[col]}" for col in changed_cols),
                    "来源说明": "；".join(source_notes),
                }
            )

    OUTPUT.parent.mkdir(parents=True, exist_ok=True)
    with OUTPUT.open("w", encoding="gb18030", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(rows)

    with AUDIT.open("w", encoding="utf-8-sig", newline="") as f:
        fieldnames_audit = ["行号", "中标单位名称", "更新字段", "更新前", "更新后", "来源说明"]
        writer = csv.DictWriter(f, fieldnames=fieldnames_audit)
        writer.writeheader()
        writer.writerows(audit_rows)

    missing_legal = sum(1 for row in rows if not (row.get("天眼查法定代表人") or "").strip())
    missing_phone = sum(1 for row in rows if not (row.get("天眼查电话") or "").strip())
    missing_contact_phone = sum(1 for row in rows if not (row.get("中标单位联系人电话") or "").strip())
    print(f"rows={len(rows)}")
    print(f"updated_cells={updates}")
    print(f"audit_rows={len(audit_rows)}")
    print(f"missing_legal_rows={missing_legal}")
    print(f"missing_phone_rows={missing_phone}")
    print(f"missing_contact_phone_rows={missing_contact_phone}")
    print(f"output={OUTPUT}")
    print(f"audit={AUDIT}")


if __name__ == "__main__":
    main()
