#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""按行号替换活动详情的 FS* 分支：改用飞书「活动类型」原值（线上下不再由 channel 映射）。

用 @NL@ 占位再替换成两字符的 \\n，避免多层转义漂移。
"""
import io
import os
import shutil
import sys
import time

ROOT = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
F = os.path.join(ROOT, '脚本', '销售工作台服务.py')

NEW = '''                    _at = (_fr.get('atype') or '').strip() or CH_OF_TYPE.get((_fr.get('channel') or '').strip(), '未填')
                    self._send_json({'ok': True, 'activity': {
                        'id': rid, 'src': 'feishu', 'date': _fr.get('date', ''),
                        'customer': _fr.get('customer', ''), 'sales': _ow, 'submitted_by': _ow,
                        'channel': _fr.get('channel', ''), 'atype': _at, 'channel_ev': [],
                        'dept_raw': _fr.get('dept_raw', ''), 'type': _fr.get('type', ''), 'order_ref_nos': [],
                        'feishu_text': ('【来源】飞书历史活动（基础数据 · 只读）@NL@【日期】%s@NL@【客户】%s@NL@'
                                        '【归属】%s@NL@【活动名称】%s@NL@【活动类型】%s@NL@【飞书跟进部门】%s@NL@@NL@【活动描述】@NL@%s'
                                        % (_fr.get('date', ''), _fr.get('customer') or '—', _ow,
                                           _fr.get('type') or '—', _at, _fr.get('dept_raw') or '—',
                                           _fr.get('text') or ''))}})'''

NEW = NEW.replace('@NL@', '\\n')          # 两字符：反斜杠 + n（与文件既有写法一致）


def main():
    apply = '--apply' in sys.argv
    s = io.open(F, encoding='utf-8').read()
    lines = s.split('\n')
    # 定位（不写死行号）：从 `_ch = {'offline'` 到该 send_json 的结尾 `}})}`
    i = next((k for k, L in enumerate(lines) if "_ch = {'offline'" in L), -1)
    j = next((k for k in range(i, min(i + 25, len(lines))) if "_fr.get('text')" in lines[k]), -1)
    print('活动详情 FS* 分支 —— %s' % ('APPLY' if apply else 'DRY-RUN'))
    print('  定位：第 %d 行 ~ 第 %d 行（共 %d 行将被替换）' % (i + 1, j + 1, j - i + 1))
    if i < 0 or j <= i or '_fr.get(' not in lines[i + 5]:
        print('  ❌ 定位失败，未落盘')
        return 1
    if apply:
        bak = os.path.join(ROOT, '_bak_p2d_detail_%s' % time.strftime('%Y%m%d-%H%M%S'))
        os.makedirs(bak, exist_ok=True)
        shutil.copy2(F, os.path.join(bak, os.path.basename(F)))
        lines[i:j + 1] = NEW.split('\n')
        io.open(F, 'w', encoding='utf-8').write('\n'.join(lines))
        print('  已写（备份 %s）' % bak)
    else:
        print('  干跑通过（未落盘）')
    return 0


sys.exit(main())
