"""Offline educational example. No Kumo/API calls or prediction scores.
Run normally for filtered data; --unsafe deliberately exits 1.
"""
import argparse
from datetime import datetime

def timestamp(value):
    return datetime.fromisoformat(value.replace('Z', '+00:00'))

AS_OF = timestamp('2026-09-01T00:00:00Z')
EVENTS = [
    {'id': 'o1', 'event_at': '2026-08-28T00:00:00Z', 'available_at': '2026-08-28T01:00:00Z'},
    {'id': 'o2', 'event_at': '2026-09-02T00:00:00Z', 'available_at': '2026-09-02T01:00:00Z'},
    {'id': 'o3', 'event_at': '2026-08-31T00:00:00Z', 'available_at': '2026-09-03T00:00:00Z'},
]
CONTEXTS = [
    {'id': 'h1', 'anchor_at': '2026-07-01T00:00:00Z', 'target_end': '2026-08-01T00:00:00Z', 'label_available_at': '2026-08-02T00:00:00Z'},
    {'id': 'h2', 'anchor_at': '2026-08-15T00:00:00Z', 'target_end': '2026-09-15T00:00:00Z', 'label_available_at': '2026-09-16T00:00:00Z'},
]

def event_allowed(row):
    return timestamp(row['event_at']) < AS_OF and timestamp(row['available_at']) <= AS_OF

def context_allowed(row):
    return timestamp(row['anchor_at']) < timestamp(row['target_end']) <= AS_OF and timestamp(row['label_available_at']) <= AS_OF

def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--unsafe', action='store_true', help='Intentionally keep future/unavailable records.')
    args = parser.parse_args()
    events = EVENTS if args.unsafe else [r for r in EVENTS if event_allowed(r)]
    contexts = CONTEXTS if args.unsafe else [r for r in CONTEXTS if context_allowed(r)]
    rejected = [r['id'] for r in events if not event_allowed(r)] + [r['id'] for r in contexts if not context_allowed(r)]
    print(f'query_records={len(events)}')
    print(f'context_examples={len(contexts)}')
    if rejected:
        print('time_boundary_check=FAIL: ' + ','.join(rejected))
        return 1
    print('time_boundary_check=PASS')
    return 0

if __name__ == '__main__':
    raise SystemExit(main())
