#!/usr/bin/env python3
from pathlib import Path
import datetime
import re

ROOT = Path('/Users/openclaw/.openclaw/workspace')
PENDING = ROOT / 'knowledge/rules/pending-promotions.md'
TODAY = datetime.datetime.now().strftime('%Y-%m-%d')
MEM = ROOT / f'memory/{TODAY}.md'

PAT = re.compile(r'(decision|policy|preference|remember|should|must|route|approval|confirm|default|always|never)', re.I)


def read_existing_open(text: str):
    lines = text.splitlines()
    in_open = False
    items = set()
    for ln in lines:
        if ln.strip() == '<!-- AUTO_PENDING_PROMOTIONS_START -->':
            in_open = True
            continue
        if ln.strip() == '<!-- AUTO_PENDING_PROMOTIONS_END -->':
            in_open = False
            continue
        if in_open and ln.strip().startswith('- [ ]'):
            items.add(ln.strip())
    return items


def build_candidates():
    out = []
    if not MEM.exists():
        return out
    for i, ln in enumerate(MEM.read_text(encoding='utf-8', errors='ignore').splitlines(), 1):
        s = ln.strip()
        if not s.startswith('- '):
            continue
        if PAT.search(s):
            out.append(f"- [ ] {TODAY} L{i}: {s[2:]}")
    return out[:30]


def write_file(existing: str, combined):
    lines = existing.splitlines()
    out = []
    in_auto = False
    for ln in lines:
        if ln.strip() == '<!-- AUTO_PENDING_PROMOTIONS_START -->':
            in_auto = True
            out.append(ln)
            for item in sorted(combined):
                out.append(item)
            continue
        if ln.strip() == '<!-- AUTO_PENDING_PROMOTIONS_END -->':
            in_auto = False
            out.append(ln)
            continue
        if in_auto:
            continue
        out.append(ln)
    PENDING.write_text('\n'.join(out) + '\n', encoding='utf-8')


def open_count(text: str):
    return sum(1 for ln in text.splitlines() if ln.strip().startswith('- [ ]'))


def main():
    existing = PENDING.read_text(encoding='utf-8', errors='ignore') if PENDING.exists() else ''
    existing_items = read_existing_open(existing)
    candidates = set(build_candidates())
    combined = existing_items | candidates
    write_file(existing or '# Pending Promotions\n\n## Open\n\n<!-- AUTO_PENDING_PROMOTIONS_START -->\n<!-- AUTO_PENDING_PROMOTIONS_END -->\n\n## Closed\n', combined)
    final = PENDING.read_text(encoding='utf-8', errors='ignore')
    print(open_count(final))


if __name__ == '__main__':
    main()
