#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""生成小羚羚氢能产业数字化平台方案书 Word 文档"""

from pathlib import Path

from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.oxml.ns import qn
from docx.shared import Cm, Pt, RGBColor

OUTPUT = Path(__file__).resolve().parent / "小羚羚氢能产业数字化平台方案书.docx"
FONT_CN = "微软雅黑"
COLOR_PRIMARY = RGBColor(0x00, 0xBF, 0xA5)
COLOR_TITLE = RGBColor(0x1A, 0x1F, 0x2E)
COLOR_MUTED = RGBColor(0x5C, 0x65, 0x78)


def set_run_font(run, size=11, bold=False, color=None, name=FONT_CN):
    run.font.name = name
    run._element.rPr.rFonts.set(qn("w:eastAsia"), name)
    run.font.size = Pt(size)
    run.font.bold = bold
    if color:
        run.font.color.rgb = color


def add_para(doc, text, size=11, bold=False, color=None, align=None, space_after=6):
    p = doc.add_paragraph()
    if align is not None:
        p.alignment = align
    p.paragraph_format.space_after = Pt(space_after)
    p.paragraph_format.line_spacing = 1.35
    run = p.add_run(text)
    set_run_font(run, size=size, bold=bold, color=color)
    return p


def add_heading(doc, text, level=1):
    h = doc.add_heading(level=level)
    h.clear()
    run = h.add_run(text)
    sizes = {1: 22, 2: 16, 3: 13}
    set_run_font(run, size=sizes.get(level, 12), bold=True, color=COLOR_TITLE if level == 1 else COLOR_PRIMARY)
    h.paragraph_format.space_before = Pt(14 if level > 1 else 0)
    h.paragraph_format.space_after = Pt(8)
    return h


def shade_cell(cell, fill="E8F8F4"):
    tc = cell._tc
    tcPr = tc.get_or_add_tcPr()
    shd = tcPr.find(qn("w:shd"))
    if shd is None:
        from docx.oxml import OxmlElement
        shd = OxmlElement("w:shd")
        tcPr.append(shd)
    shd.set(qn("w:fill"), fill)
    shd.set(qn("w:val"), "clear")


def add_table(doc, headers, rows, col_widths=None):
    table = doc.add_table(rows=1 + len(rows), cols=len(headers))
    table.style = "Table Grid"
    table.alignment = WD_TABLE_ALIGNMENT.CENTER
    hdr_cells = table.rows[0].cells
    for i, h in enumerate(headers):
        hdr_cells[i].text = ""
        run = hdr_cells[i].paragraphs[0].add_run(h)
        set_run_font(run, size=10, bold=True, color=COLOR_TITLE)
        shade_cell(hdr_cells[i], "D4F5EC")
    for ri, row in enumerate(rows):
        cells = table.rows[ri + 1].cells
        for ci, val in enumerate(row):
            cells[ci].text = ""
            run = cells[ci].paragraphs[0].add_run(str(val))
            set_run_font(run, size=10)
            if ri % 2 == 1:
                shade_cell(cells[ci], "F7FBFA")
    if col_widths:
        for row in table.rows:
            for i, w in enumerate(col_widths):
                row.cells[i].width = Cm(w)
    doc.add_paragraph()
    return table


def build_document():
    doc = Document()
    section = doc.sections[0]
    section.top_margin = Cm(2.5)
    section.bottom_margin = Cm(2.5)
    section.left_margin = Cm(2.8)
    section.right_margin = Cm(2.8)

    # 封面
    add_para(doc, "", space_after=24)
    add_para(doc, "羚牛氢能 · OneOS 生态", size=12, color=COLOR_MUTED, align=WD_ALIGN_PARAGRAPH.CENTER, space_after=12)
    add_para(doc, "小羚羚氢能产业数字化平台方案书", size=26, bold=True, color=COLOR_PRIMARY, align=WD_ALIGN_PARAGRAPH.CENTER, space_after=16)
    add_para(doc, "手机端「小羚羚」多端协同 · 氢能产业链数字化规划", size=13, color=COLOR_MUTED, align=WD_ALIGN_PARAGRAPH.CENTER, space_after=32)
    meta = doc.add_paragraph()
    meta.alignment = WD_ALIGN_PARAGRAPH.CENTER
    for line in ["文档版本：v1.0", "文档类型：平台建设规划 / 商业计划", "适用读者：管理层、产品、业务、项目团队"]:
        r = meta.add_run(line + "\n")
        set_run_font(r, size=11, color=COLOR_MUTED)
    doc.add_page_break()

    # 一、概述
    add_heading(doc, "一、项目概述", 1)
    add_para(doc, "以手机端「小羚羚」为统一入口，连接内部运营、车队客户、司机、加氢站、维修站、制氢企业与集团客户，实现氢气采购—加氢站—氢能车运营全链路数字化闭环。")
    add_para(doc, "一句话定位", size=12, bold=True, color=COLOR_PRIMARY, space_after=4)
    add_para(doc, "小羚羚 = 氢能产业的「业务操作系统」：一端登录、多角色协同，把合同、车辆、能源、维保、氢气贸易串成可落地、可风控、可结算的完整商业链条。")

    add_heading(doc, "核心指标", 2)
    add_table(doc, ["指标项", "目标值"], [
        ["目标用户角色", "7 类"],
        ["业务闭环条数", "3 条"],
        ["产业链覆盖", "上中下游（制氢采购 → 加氢站 → 氢能车运营）"],
        ["首期上线周期", "6 个月"],
    ], col_widths=[5, 11])

    # 二、产业链商业计划
    add_heading(doc, "二、氢能产业链商业计划（上游 → 下游）", 1)
    add_para(doc, "覆盖氢气采购、加氢站运营、氢能车租赁/自营三大环节，形成「制氢—储运—加注—运营—结算」一体化商业模式。")

    add_heading(doc, "2.1 产业链三段式布局", 2)
    add_table(doc, ["环节", "业务内容", "平台价值"], [
        ["上游 · 制氢采购", "制氢企业挂牌售氢、管束车调度、到站交付", "氢气贸易与物流协同"],
        ["中游 · 加氢站", "预约接单、电子加氢卡结算、巡检与对账", "加注服务数字化与氢费结算"],
        ["下游 · 氢能车运营", "租赁/自营、交还车、能源与 ETC 账单闭环", "车辆运营与资产管理"],
    ], col_widths=[3.5, 7, 5.5])

    add_heading(doc, "2.2 商业模式与收入结构", 2)
    add_heading(doc, "上游 · 氢气贸易", 3)
    add_para(doc, "制氢企业在线挂牌售氢；加氢站/运营方发起采购询价；成交后管束车配送到站。平台收取交易撮合费、物流调度服务费、数据监测服务费。")
    add_heading(doc, "中游 · 加氢服务", 3)
    add_para(doc, "司机预约加氢、电子加氢卡预充值结算；站点 OCR 识别加氢量自动入账；氢费对账线上化。平台收取 SaaS 服务费、支付通道费、对账增值服务费。")
    add_heading(doc, "下游 · 车辆运营", 3)
    add_para(doc, "租赁/自营合同在线签约；交还车+替换车闭环；能源/ETC/维保账单聚合；客户评级与敏感客户风控。平台核心收入为租赁服务费、资产管理费、金融结算服务。")

    # 三、平台架构
    add_heading(doc, "三、平台架构：七类用户 · 一套数据底座", 1)
    add_table(doc, ["用户端", "主体", "核心能力", "关键场景"], [
        ["内部用户", "羚牛氢能员工", "合同-收款-交还车-结算全链路；车辆全生命周期；风控审批", "业务员/运维/能源/财务/法务/CEO 等"],
        ["车队长", "车队管理者", "一键租车报价签约；车辆运行/账单/开票/对讲", "注册验证、在线合同、实时定位"],
        ["氢能车司机", "自营+外部租赁", "路线导航、能源账单、安全培训考试、预约加氢、故障救援", "内外部司机差异化权限"],
        ["加氢站用户", "站点运营", "预约接单、电子加氢卡结算、OCR 识别加氢量、氢费对账", "特种设备/行驶证校验"],
        ["维修站用户", "维保服务", "维修/保养派单接单、费用记录、运维核实对账", "配件人工自动入账"],
        ["制氢企业", "氢气供应", "在线挂牌售氢、管束车监测、询价成交与运费结算", "对接加氢站采购"],
        ["集团客户", "企业级客户", "多项目车辆/账单/能源/ETC 总览；在线租车签约", "类车队长但主体为企业"],
    ], col_widths=[2.2, 2.5, 6.3, 5])

    # 四、分角色方案
    add_heading(doc, "四、分角色业务方案（可落地）", 1)

    add_heading(doc, "4.1 内部用户 — 运营中枢与风控大脑", 2)
    add_para(doc, "羚牛氢能内部员工 · 多部门协同", size=10, color=COLOR_MUTED)
    add_para(doc, "业务条线 A：氢能车租赁/自营", size=11, bold=True)
    add_para(doc, "合同发起 → 客户评级/敏感客户校验 → 标准/非标合同审批 → 收款 → 交车 → 账单收款 → 还车 → 还车结算。过程中支持替换车业务，全程留痕、可审计。")
    add_para(doc, "业务条线 B：车辆全生命周期", size=11, bold=True)
    add_para(doc, "采购/外租 → 验车入库 → 维修/年审/保养/故障/事故 → 出库（出售/报废/停租）。形成单车全生命周期数据档案，支撑资产决策与残值管理。")
    add_para(doc, "覆盖角色：业务员、客服、运维、能源、安全、财务、法务、CEO 等；按岗位分配功能模块与审批权限。")

    add_heading(doc, "4.2 车队长 — 车队管理者自助门户", 2)
    add_para(doc, "注册验证 · 在线租车 · 合同签约", size=10, color=COLOR_MUTED)
    add_para(doc, "一键登录验证注册状态：未注册客户可快速登记营业执照/身份证；已注册客户直接进入管理页。")
    add_table(doc, ["步骤", "动作", "系统响应"], [
        ["1", "选择车型、数量、租期发起租车意向", "短信/推送通知对应业务员"],
        ["2", "系统按地区自动生成报价单", "业务员可调整并与客户在线沟通"],
        ["3", "确认报价并提交", "自动生成电子合同，推送客户签章"],
        ["4", "运维完成交车", "车队长查看车辆运行、账单、开票、对讲"],
    ], col_widths=[1.2, 6, 8.8])
    add_para(doc, "交车后能力：实时定位/轨迹、氢/电能源账单、ETC、合同账单、付款、在线开票、语音对讲（类对讲机）。")

    add_heading(doc, "4.3 氢能车司机 — 自营与外部双轨", 2)
    add_table(doc, ["类型", "核心能力"], [
        ["内部自营司机", "定位/轨迹、送货路线规划与导航、氢/电/ETC 账单、安全培训与定期考试、证照管理、氢/电量提醒、预约附近加氢站（校验特种设备登记/行驶证）、故障提报、紧急救援"],
        ["外部租赁司机", "轨迹与路线导航、能源/ETC 账单、安全培训、司机与车辆证件管理、预约加氢（证件校验提示）、故障提报、紧急救援；不含集团内部物流专属调度能力"],
    ], col_widths=[3, 13])

    add_heading(doc, "4.4 加氢站用户 — 加注服务与氢费结算", 2)
    add_table(doc, ["功能模块", "说明"], [
        ["预约接单", "验证车辆特种设备检验登记、行驶证后确认服务"],
        ["电子加氢卡结算", "扫描司机电子加氢卡，预充值客户直接扣款"],
        ["加氢过程管理", "加氢前/中/后检查、卸气记录、站点巡检记录"],
        ["OCR 加氢量识别", "拍摄加氢机面板自动识别加氢量，绑定车辆生成记录"],
        ["氢费对账", "接收并操作氢费对账单，线上确认"],
        ["氢气采购", "向制氢企业发起采购（与上游模块联动）"],
    ], col_widths=[3.5, 12.5])

    add_heading(doc, "4.5 维修站用户 — 维保派单与对账", 2)
    add_para(doc, "接收内部员工发起的维修/保养派单 → 记录维修过程与人工/配件费用 → 自动生成维修记录 → 运维核实 → 内部用户与维修站在线对账及账期结算。与车辆全生命周期数据打通。")

    add_heading(doc, "4.6 制氢企业 — 氢气在线交易与物流", 2)
    add_para(doc, "企业资质验证后，在线发布氢气对外采购价（类商城模式）；对接管束车实时数据，监测氢气运输车状态；加氢站发起询价与采购申请 → 制氢企业成交 → 运输到场 → 自动计算管束车使用费用。")
    add_para(doc, "关键能力：挂牌售氢 · 询价采购 · 物流调度 · 运费结算")

    add_heading(doc, "4.7 集团客户 — 企业级总览与在线租车", 2)
    add_para(doc, "主体为企业（区别于个人车队长）：查看集团所有租赁/自营项目车辆使用情况、全项目账单与结算、电子开票、能源费（氢/电）、ETC、司机信息汇总。同时支持 APP 在线租车并生成对应合同，完成业务闭环。")
    add_para(doc, "与车队长差异：车队长侧重单车队运营；集团客户侧重企业级多项目、多合同、多车队的统一视图与集团采购决策。", bold=True)

    # 五、业务闭环
    add_heading(doc, "五、三大业务闭环总览", 1)
    loops = [
        ("闭环一 · 租赁/自营运营（核心收入）", "意向单 → 报价 → 合同（评级/敏感客户审批）→ 交车 → 运营监控 → 账单收款 → 还车 → 结算 → 替换车（如需）"),
        ("闭环二 · 车辆资产生命周期（资产管控）", "采购/外租 → 验车入库 → 维保/年审/故障/事故 → 能源消耗 → 出库处置；全链路数据沉淀至 OneOS 数据底座"),
        ("闭环三 · 氢气贸易与加注（产业延伸）", "制氢企业挂牌 → 加氢站询价采购 → 管束车配送 → 司机预约加氢 → 电子加氢卡结算 → 氢费对账 → 运营账单聚合"),
    ]
    for title, flow in loops:
        add_para(doc, title, size=12, bold=True, color=COLOR_PRIMARY)
        add_para(doc, flow)

    # 六、路线图
    add_heading(doc, "六、分阶段落地路线图", 1)
    add_table(doc, ["阶段", "周期", "重点模块", "交付成果"], [
        ["第一阶段", "0–6 月", "内部用户 + 车队长 + 司机核心闭环", "合同审批、交还车、替换车、基础账单"],
        ["第二阶段", "6–12 月", "加氢站 + 维修站接入", "预约加氢、电子加氢卡、维修派单对账"],
        ["第三阶段", "12–18 月", "制氢企业 + 氢气采购商城", "挂牌售氢、管束车调度、到站结算"],
        ["第四阶段", "18–24 月", "集团客户 + 数据智能", "集团总览、风控模型、产业数据分析"],
    ], col_widths=[2.2, 2, 5.8, 6])

    # 七、汇报要点
    add_heading(doc, "七、向管理层汇报要点", 1)
    points = [
        "小羚羚不是单一 App，而是氢能产业多端协同的数字化入口，与 OneOS Web 端形成「大屏管控 + 手机执行」互补。",
        "首期 6 个月聚焦租赁闭环与内部风控，快速产生业务价值；氢气贸易模块作为第二增长曲线。",
        "客户评级与敏感客户审批机制内嵌合同流程，从源头降低收账风险，支撑非标业务合规扩张。",
        "七类用户共用同一数据底座，避免信息孤岛，为后续氢能产业数据分析与智能调度奠定基础。",
    ]
    for i, pt in enumerate(points, 1):
        add_para(doc, f"{i}. {pt}")

    add_para(doc, "", space_after=24)
    add_para(doc, "— 文档结束 —", size=10, color=COLOR_MUTED, align=WD_ALIGN_PARAGRAPH.CENTER)
    add_para(doc, "羚牛氢能 · 小羚羚平台方案 · OneOS 生态 · 供内部汇报使用", size=10, color=COLOR_MUTED, align=WD_ALIGN_PARAGRAPH.CENTER)

    doc.save(OUTPUT)
    return OUTPUT


if __name__ == "__main__":
    path = build_document()
    print(f"已生成：{path}")
