#!/usr/bin/env python3
from __future__ import annotations
import json, sys
from pathlib import Path
from jsonschema import Draft202012Validator

def main():
    if len(sys.argv)<2: raise SystemExit('validate_edit_plan.py plan.json [schema.json]')
    plan=Path(sys.argv[1]); schema=Path(sys.argv[2]) if len(sys.argv)>2 else Path(__file__).resolve().parents[1]/'schema/edit_plan.schema.json'
    p=json.loads(plan.read_text(encoding='utf-8')); s=json.loads(schema.read_text(encoding='utf-8'))
    errs=sorted(Draft202012Validator(s).iter_errors(p),key=lambda e:list(e.path))
    if errs:
        for e in errs: print('/'.join(map(str,e.path)),e.message,file=sys.stderr)
        raise SystemExit(2)
    last_word=-1
    for scene in p['scenes']:
        a=scene['anchor_word_start']; b=scene['anchor_word_end']
        if b<a: raise SystemExit(f"{scene['id']}: anchor_word_end < anchor_word_start")
        if a<last_word: print(f"ПРЕДУПРЕЖДЕНИЕ: {scene['id']} перекрывает предыдущую сцену по словам")
        last_word=max(last_word,b)
        if 'resolved_start' in scene and 'resolved_end' in scene and scene['resolved_end']<=scene['resolved_start']:
            raise SystemExit(f"{scene['id']}: resolved_end <= resolved_start")
    print('edit_plan valid')
if __name__=='__main__': main()
