#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""生成给之江的宝锐生物公司介绍 Word（文字版）。"""
from pathlib import Path
from docx import Document
from docx.shared import Pt, Cm, Mm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_BREAK
from docx.enum.section import WD_SECTION
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.oxml import OxmlElement
from docx.oxml.ns import qn

BASE = Path('/Users/liuxinyuan/Desktop/Hermes输出-工作类')
OUTDIR = BASE / '对外物料' / '公司资质文件_20261102'
OUTDIR.mkdir(parents=True, exist_ok=True)
OUT = OUTDIR / '宝锐生物_公司介绍_20261102_V01.docx'
LOGO = Path('/Users/liuxinyuan/work/公司资料/logo_transparent.png')

NAVY = RGBColor(0x12, 0x3B, 0x5C)
BLUE = RGBColor(0x1F, 0x4E, 0x79)
TEAL = RGBColor(0x0E, 0x6E, 0x7A)
GREY = RGBColor(0x55, 0x6E, 0x7F)
BLACK = RGBColor(0x1A, 0x1A, 0x1A)
WHITE = RGBColor(0xFF, 0xFF, 0xFF)


def set_run_font(run, name_cn='宋体', name_en='Times New Roman', size=10.5, bold=None, color=None):
    run.font.name = name_en
    run.font.size = Pt(size)
    if bold is not None:
        run.bold = bold
    if color is not None:
        run.font.color.rgb = color
    rPr = run._element.get_or_add_rPr()
    rFonts = rPr.find(qn('w:rFonts'))
    if rFonts is None:
        rFonts = OxmlElement('w:rFonts')
        rPr.append(rFonts)
    rFonts.set(qn('w:ascii'), name_en)
    rFonts.set(qn('w:hAnsi'), name_en)
    rFonts.set(qn('w:eastAsia'), name_cn)


def shade(cell, hexcolor):
    tcPr = cell._tc.get_or_add_tcPr()
    shd = OxmlElement('w:shd')
    shd.set(qn('w:fill'), hexcolor)
    tcPr.append(shd)


def cell_text(cell, text, size=9.5, bold=False, color=BLACK, align=WD_ALIGN_PARAGRAPH.LEFT):
    cell.text = ''
    p = cell.paragraphs[0]
    p.alignment = align
    p.paragraph_format.space_before = Pt(2)
    p.paragraph_format.space_after = Pt(2)
    p.paragraph_format.line_spacing = 1.15
    r = p.add_run(text)
    set_run_font(r, '宋体', 'Times New Roman', size, bold, color)


def add_page_number(paragraph):
    run = paragraph.add_run('第 ')
    set_run_font(run, '宋体', 'Times New Roman', 8.5, False, GREY)
    fld = OxmlElement('w:fldSimple')
    fld.set(qn('w:instr'), 'PAGE')
    r = OxmlElement('w:r')
    t = OxmlElement('w:t')
    t.text = '1'
    r.append(t)
    fld.append(r)
    paragraph._p.append(fld)
    run = paragraph.add_run(' 页 / 共 ')
    set_run_font(run, '宋体', 'Times New Roman', 8.5, False, GREY)
    fld2 = OxmlElement('w:fldSimple')
    fld2.set(qn('w:instr'), 'NUMPAGES')
    r2 = OxmlElement('w:r')
    t2 = OxmlElement('w:t')
    t2.text = '4'
    r2.append(t2)
    fld2.append(r2)
    paragraph._p.append(fld2)
    run = paragraph.add_run(' 页')
    set_run_font(run, '宋体', 'Times New Roman', 8.5, False, GREY)


def add_heading(doc, text, level=1):
    p = doc.add_paragraph()
    p.paragraph_format.space_before = Pt(12 if level == 1 else 8)
    p.paragraph_format.space_after = Pt(4)
    p.paragraph_format.keep_with_next = True
    if text.startswith('一、'):
        p.paragraph_format.page_break_before = True
    p.style = doc.styles['Heading %d' % level]
    r = p.add_run(text)
    set_run_font(r, '宋体', 'Times New Roman', 14 if level == 1 else 11.5, True, BLUE if level == 1 else TEAL)
    return p


def add_body(doc, text, indent=True, size=10.5, space_after=4, color=BLACK, bold=False):
    p = doc.add_paragraph()
    p.paragraph_format.line_spacing = 1.55
    p.paragraph_format.space_after = Pt(space_after)
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
    if indent:
        p.paragraph_format.first_line_indent = Pt(size * 2)
    r = p.add_run(text)
    set_run_font(r, '宋体', 'Times New Roman', size, bold, color)
    return p


def add_bullet(doc, text, size=10.2):
    p = doc.add_paragraph(style='List Bullet')
    p.paragraph_format.line_spacing = 1.45
    p.paragraph_format.space_after = Pt(2)
    r = p.add_run(text)
    set_run_font(r, '宋体', 'Times New Roman', size, False, BLACK)
    return p


def add_table(doc, headers, rows, widths, header_color='1F4E79', font_size=9.3):
    table = doc.add_table(rows=1, cols=len(headers))
    table.alignment = WD_TABLE_ALIGNMENT.CENTER
    table.autofit = False
    table.style = 'Table Grid'
    for i, (h, w) in enumerate(zip(headers, widths)):
        cell = table.rows[0].cells[i]
        cell.width = Cm(w)
        shade(cell, header_color)
        cell_text(cell, h, font_size, True, WHITE)
    for row in rows:
        cells = table.add_row().cells
        for i, val in enumerate(row):
            cells[i].width = Cm(widths[i])
            cell_text(cells[i], val, font_size, False, BLACK)
    return table


def add_cover(doc):
    # logo
    p = doc.add_paragraph()
    p.alignment = WD_ALIGN_PARAGRAPH.LEFT
    p.paragraph_format.space_before = Pt(12)
    p.paragraph_format.space_after = Pt(18)
    p.add_run().add_picture(str(LOGO), width=Mm(52))
    # accent line
    p = doc.add_paragraph()
    p.paragraph_format.space_before = Pt(0)
    p.paragraph_format.space_after = Pt(48)
    pPr = p._p.get_or_add_pPr()
    pbdr = OxmlElement('w:pBdr')
    bottom = OxmlElement('w:bottom')
    bottom.set(qn('w:val'), 'single')
    bottom.set(qn('w:sz'), '12')
    bottom.set(qn('w:space'), '1')
    bottom.set(qn('w:color'), '1F4E79')
    pbdr.append(bottom)
    pPr.append(pbdr)
    # title
    p = doc.add_paragraph()
    p.paragraph_format.space_before = Pt(20)
    p.paragraph_format.space_after = Pt(4)
    r = p.add_run('公司介绍')
    set_run_font(r, '宋体', 'Times New Roman', 32, True, NAVY)
    p = doc.add_paragraph()
    p.paragraph_format.space_after = Pt(12)
    r = p.add_run('珠海宝锐生物科技有限公司')
    set_run_font(r, '宋体', 'Times New Roman', 16, False, BLUE)
    p = doc.add_paragraph()
    p.paragraph_format.space_after = Pt(2)
    r = p.add_run('Zhuhai Biori Biotechnology Co., Ltd.')
    set_run_font(r, '宋体', 'Times New Roman', 10, False, GREY)
    # meta box
    p = doc.add_paragraph()
    p.paragraph_format.space_before = Pt(70)
    p.paragraph_format.space_after = Pt(0)
    r = p.add_run('2026 年')
    set_run_font(r, '宋体', 'Times New Roman', 10.5, False, GREY)
    p = doc.add_paragraph()
    p.paragraph_format.space_after = Pt(0)
    r = p.add_run('中国 · 广东 · 珠海')
    set_run_font(r, '宋体', 'Times New Roman', 10.5, False, GREY)
    doc.add_page_break()


def main():
    doc = Document()
    # page setup
    sec = doc.sections[0]
    sec.page_width = Mm(210)
    sec.page_height = Mm(297)
    sec.top_margin = Mm(20)
    sec.bottom_margin = Mm(18)
    sec.left_margin = Mm(22)
    sec.right_margin = Mm(22)
    sec.header_distance = Mm(9)
    sec.footer_distance = Mm(9)
    sec.different_first_page_header_footer = True

    # base style
    normal = doc.styles['Normal']
    normal.font.name = 'Times New Roman'
    normal.font.size = Pt(10.5)
    normal.font.color.rgb = BLACK
    normal._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
    normal.paragraph_format.line_spacing = 1.5
    normal.paragraph_format.space_after = Pt(4)

    # header
    header = sec.header
    hp = header.paragraphs[0]
    hp.alignment = WD_ALIGN_PARAGRAPH.LEFT
    hp.paragraph_format.space_after = Pt(2)
    hp.add_run().add_picture(str(LOGO), width=Mm(22))
    hp.add_run('    ')
    r = hp.add_run('珠海宝锐生物科技有限公司  ·  公司介绍')
    set_run_font(r, '宋体', 'Times New Roman', 9, False, BLUE)
    r = hp.add_run('    2026-11')
    set_run_font(r, '宋体', 'Times New Roman', 8.5, False, GREY)
    # header bottom border
    pPr = hp._p.get_or_add_pPr()
    pbdr = OxmlElement('w:pBdr')
    bottom = OxmlElement('w:bottom')
    bottom.set(qn('w:val'), 'single')
    bottom.set(qn('w:sz'), '6')
    bottom.set(qn('w:space'), '2')
    bottom.set(qn('w:color'), 'BFD4E2')
    pbdr.append(bottom)
    pPr.append(pbdr)

    # footer
    footer = sec.footer
    fp = footer.paragraphs[0]
    fp.alignment = WD_ALIGN_PARAGRAPH.CENTER
    fp.paragraph_format.space_before = Pt(0)
    fp.paragraph_format.space_after = Pt(1)
    r = fp.add_run('守护生命健康，缔造美好生活')
    set_run_font(r, '宋体', 'Times New Roman', 9, True, TEAL)
    fp2 = footer.add_paragraph()
    fp2.alignment = WD_ALIGN_PARAGRAPH.CENTER
    fp2.paragraph_format.space_after = Pt(0)
    r = fp2.add_run('珠海宝锐生物科技有限公司 ｜ 0756-8699969 ｜ marketing@biori.com ｜ www.biori.com ｜ 珠海市香洲区水岸一路88号')
    set_run_font(r, '宋体', 'Times New Roman', 7.5, False, GREY)
    fp3 = footer.add_paragraph()
    fp3.alignment = WD_ALIGN_PARAGRAPH.CENTER
    fp3.paragraph_format.space_before = Pt(1)
    add_page_number(fp3)

    # cover
    add_cover(doc)

    # 一、公司概况
    add_heading(doc, '一、公司概况', 1)
    add_body(doc, '珠海宝锐生物科技有限公司成立于 2012 年，总部位于广东省珠海市香洲区水岸一路 88 号，专注于为生物科技领域的工业与科研用户提供生物原料与试剂解决方案。公司是国家高新技术企业、国家专精特新“小巨人”企业，建有广东省分子诊断原料酶工程技术研究中心、珠海市企业技术中心、广东省博士后创新实践基地。')
    add_body(doc, '公司依托蛋白进化、重组表达、抗体开发、适配体筛选、工艺开发及应用研究等技术平台，形成了覆盖诊断原料、生命科学、生物医药三大板块的业务体系，并为客户提供从原料筛选、体系优化到冻干工艺的技术支持。')
    add_table(doc, ['项目', '内容'], [
        ['公司名称', '珠海宝锐生物科技有限公司'],
        ['成立时间', '2012 年'],
        ['总部地址', '广东省珠海市香洲区水岸一路 88 号'],
        ['业务定位', '生物原料与试剂解决方案；诊断原料、生命科学、生物医药三大板块'],
        ['质量体系', 'ISO 9001:2015、ISO 13485:2016 质量管理体系'],
    ], [3.2, 13.0], font_size=9.2)

    # 二、业务板块
    add_heading(doc, '二、业务板块', 1)
    add_body(doc, '围绕核酸诊断、生命科学研究和生物医药质量控制，公司形成了三类相互衔接的产品与服务：')
    add_table(doc, ['业务板块', '主要内容', '典型产品/服务方向'], [
        ['诊断原料', '分子诊断用酶、预混液及辅助原料', 'qPCR / qRT-PCR 预混液、LAMP / RT-LAMP、分子酶、可冻干原料'],
        ['生命科学', '分子生物学、核酸提取纯化、NGS 建库、蛋白研究', 'PCR / qPCR 试剂、核酸提取试剂、NGS 文库构建、蛋白研究试剂'],
        ['生物医药', 'mRNA 原料、生物制品质量安全分析', 'IVT 酶、宿主细胞 DNA（HCD）/ 宿主细胞蛋白（HCP）检测、冻干服务'],
    ], [3.2, 6.6, 6.4], font_size=9.0)

    # 三、技术平台
    add_heading(doc, '三、技术平台', 1)
    add_body(doc, '公司围绕“酶分子发现—改造—表达—纯化—配方—应用”建立完整技术链路，重点平台包括：')
    add_bullet(doc, '蛋白进化平台：微孔板筛选（MTPS）、微流控高通量筛选（MHTS）与计算机辅助设计（CARD），用于提高酶的热稳定性、活性与底物适应性。')
    add_bullet(doc, '重组表达与纯化平台：工程菌株构建、三级种子库管理、高密度发酵、蛋白精细纯化，重视批间一致性。')
    add_bullet(doc, '抗体与适配体平台：抗体开发、适配体筛选及化学/配基修饰，用于高特异性、高灵敏度检测体系。')
    add_bullet(doc, '工艺开发与应用研究平台：从酶蛋白修饰、成品试剂配制到客户体系适配、冻干工艺开发与技术支持。')

    # 四、生产与质量
    add_heading(doc, '四、生产与质量', 1)
    add_body(doc, '公司按照 ISO 9001 与 ISO 13485 的要求实施全生产周期质量管理，覆盖工程菌株、发酵、纯化、酶修饰、成品配制、检验与放行等环节。')
    add_bullet(doc, '发酵工序包含 C 级和 D 级洁净区，配套全自动发酵系统，满足规模化工程菌发酵需求。')
    add_bullet(doc, '纯化工序在 C 级洁净区由生产型层析设备与自动配液罐通过封闭式管道连接，减少外源污染。')
    add_bullet(doc, '配备 9 套符合 GMP 要求的洁净车间及多条全新风 CNC 控制区，并配备药用级纯化水与注射用水系统。')
    add_bullet(doc, '质量管理体系自 2018 年取得 ISO 9001 证书、2024 年取得 ISO 13485 体系证书，持续接受内审、第三方审核与监管机构审核。')

    # 五、资质与荣誉
    add_heading(doc, '五、资质与荣誉', 1)
    add_body(doc, '公司已取得的体系认证与主要资质如下；证书原件另附《资质文件合订本》。')
    add_table(doc, ['资质/荣誉', '说明'], [
        ['ISO 9001:2015', '质量管理体系认证'],
        ['ISO 13485:2016', '医疗器械质量管理体系认证'],
        ['国家高新技术企业', '国家高新技术企业认定'],
        ['国家专精特新“小巨人”企业', '工业和信息化部认定'],
        ['广东省专精特新中小企业', '广东省认定'],
        ['广东省分子诊断原料酶工程技术研究中心', '广东省科技厅认定'],
        ['珠海市企业技术中心', '珠海市认定'],
        ['广东省博士后创新实践基地', '广东省人力资源和社会保障厅批准设立'],
    ], [7.6, 8.6], font_size=9.0)

    # 六、合作与联系
    add_heading(doc, '六、合作与联系', 1)
    add_body(doc, '公司可围绕分子诊断原料、qPCR / qRT-PCR / LAMP 体系、可冻干原料与冻干服务、NGS 建库及生物医药质量检测等方向开展原料供应、定制开发与技术合作。具体产品规格、验证数据与样品申请，可按项目对接。')
    add_body(doc, '地址：广东省珠海市香洲区水岸一路 88 号')
    add_body(doc, '电话：0756-8699969　｜　邮箱：marketing@biori.com　｜　网址：www.biori.com', indent=False)

    # closing
    p = doc.add_paragraph()
    p.paragraph_format.space_before = Pt(18)
    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
    r = p.add_run('守护生命健康，缔造美好生活')
    set_run_font(r, '宋体', 'Times New Roman', 10, True, TEAL)

    doc.save(str(OUT))
    print('written', OUT, OUT.stat().st_size)


if __name__ == '__main__':
    main()
