#!/usr/bin/env python3
"""安装受管服务同步停服钩子；默认预演，显式apply才落盘，不启停业务。"""
import argparse
from datetime import datetime
from pathlib import Path
import shutil
import guard

DROP_NAME = '40-usb-storage-guard-intent.conf'


def dropin(config=guard.CONFIG):
    return ('[Service]\n'
            '# 同步记录手动停服；只变更自身意图，不改业务用户/CPU/端口。\n'
            'ReadWritePaths=/var/lib/usb-storage-guard\n'
            'ExecStartPre=+/opt/usb-storage-guard/venv/bin/python /opt/usb-storage-guard/guard.py --config ' + config + ' service-start %n\n'
            'ExecStopPost=+/opt/usb-storage-guard/venv/bin/python /opt/usb-storage-guard/guard.py --config ' + config + ' service-stop %n\n')


def install(cfg, apply=False):
    stamp = datetime.now().strftime('%Y%m%d-%H%M%S')
    # 升级前只保留状态；不对当前停止业务作任何start/restart。
    if apply:
        guard.prepare_services(cfg)
    for disk in cfg['disks']:
        for service in disk.get('services', []):
            target = Path('/etc/systemd/system', service + '.d', DROP_NAME)
            existing = target.read_text() if target.exists() else None
            content = dropin()
            print(('安装：' if apply else '预演：') + str(target))
            if apply:
                target.parent.mkdir(parents=True, exist_ok=True)
                if existing is not None:
                    shutil.copy2(target, str(target) + '.bak.' + stamp)
                target.write_text(content)
    if apply:
        guard.run(['systemctl', 'daemon-reload'])
    print('未启动、停止或重启任何业务服务；已有停止意图保留。')


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--apply', action='store_true')
    args = parser.parse_args()
    install(guard.load_config(guard.CONFIG), args.apply)
