#!/usr/bin/env python3
import argparse
import json
import uuid
from datetime import datetime
from pathlib import Path
import requests
from requests.auth import HTTPBasicAuth

SKILL_DIR = Path('/root/.openclaw/workspace/skills/wecom-caldav-calendar')
CONFIG_PATH = SKILL_DIR / 'references' / 'config.json'

def load_config():
    return json.loads(CONFIG_PATH.read_text())

def normalize_title(title: str) -> str:
    suffix = ' (From OpenClaw)'
    return title if title.endswith(suffix) else title + suffix


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument('summary')
    ap.add_argument('start')  # 2026-03-25T08:00:00
    ap.add_argument('end')    # 2026-03-25T09:00:00
    ap.add_argument('--location', default='')
    ap.add_argument('--description', default='')
    args = ap.parse_args()

    cfg = load_config()
    auth = HTTPBasicAuth(cfg['username'], cfg['password'])
    uid = str(uuid.uuid4()).replace('-', '')
    summary = normalize_title(args.summary)
    start = datetime.fromisoformat(args.start)
    end = datetime.fromisoformat(args.end)

    # 企业微信 CalDAV 对通用 UTC 写法兼容性不好，使用其原生接受的 TZ08 结构更稳
    dtstamp_local = datetime.now().strftime("%Y%m%dT%H%M%S")

    lines = [
        'BEGIN:VCALENDAR',
        'VERSION:2.0',
        'PRODID:-//Tencent Inc.//QQMail//CalDAV v1.0//EN',
        'CALSCALE:GREGORIAN',
        'BEGIN:VTIMEZONE',
        'TZID:TZ08',
        'BEGIN:STANDARD',
        'DTSTART:19700101T000000',
        'TZOFFSETFROM:+0800',
        'TZOFFSETTO:+0800',
        'END:STANDARD',
        'END:VTIMEZONE',
        'BEGIN:VEVENT',
        f'UID:{uid}',
        f'DTSTAMP:{dtstamp_local}',
        f'CREATED:{dtstamp_local}',
        'SEQUENCE:0',
        f'DTSTART;TZID=TZ08:{start.strftime("%Y%m%dT%H%M%S")}',
        f'DTEND;TZID=TZ08:{end.strftime("%Y%m%dT%H%M%S")}',
        f'SUMMARY:{summary}',
        'TRANSP:OPAQUE',
    ]
    if args.location:
        lines.append(f'LOCATION:{args.location}')
    if args.description:
        lines.append(f'DESCRIPTION:{args.description}')
    lines += ['END:VEVENT', 'END:VCALENDAR', '']
    ics = '\r\n'.join(lines)

    put_url = cfg['base_url'] + cfg['calendar_path'] + uid + '.ics'
    r = requests.put(put_url, data=ics.encode('utf-8'), headers={'Content-Type':'text/calendar; charset=utf-8'}, auth=auth, timeout=30)
    print('STATUS', r.status_code)
    print('TITLE', summary)
    print('URL', put_url)
    if r.text:
        print(r.text[:1000])
    raise SystemExit(0 if r.status_code in (200,201,204) else 1)

if __name__ == '__main__':
    main()
