from pathlib import Path
import subprocess,sys
out=Path(__file__).resolve().parent
root=out.parent/('review-baseline' if '--baseline' in sys.argv else 'code');label='red' if '--baseline' in sys.argv else 'green'
s=(root/'application/src/main/java/cn/jojo/cc/biz/service/english/dict/EnglishPublishBizServiceImpl.java').read_text();a=s.index('    public PublishResultBo publishAutoFillWord(');b=s.index('\n    }',a)+6
java=out/('eligibility-'+label);java.mkdir(exist_ok=True)
p=java/'cn/jojo/cc/common/enums/english/DictSourceEnum.java';p.parent.mkdir(parents=True,exist_ok=True);p.write_text('package cn.jojo.cc.common.enums.english;public enum DictSourceEnum{SEGMENT_AUTOFILL;public Integer getCode(){return 3;}}')
header="""import java.util.*;import java.util.function.*;
public class EligibilityProbe {
 static class LoginUserBo{}static class PublishResultBo{boolean prod;boolean isProdPublished(){return prod;}}
 static class EnglishWordDo{Integer eligible,status=0;Long getId(){return 1L;}String getWordNormalized(){return "cat";}Integer getSource(){return 3;}Integer getStatus(){return status;}Integer getHasPublished(){return 0;}Long getCreateTime(){return 100L;}Long getUpdateTime(){return 100L;}Integer getAutoPublishEligible(){return eligible;}}
 enum EnglishPublishStatusEnum{UNPUBLISHED;Integer getCode(){return 0;}}
 static class Locks{<T>T callWithWordLock(Long id,String text,Supplier<T> work){return work.get();}}Locks englishDictWriteLockService=new Locks();
 EnglishWordDo row=new EnglishWordDo();EnglishWordDo requireWord(Long id){return row;}PublishResultBo doPublishWord(EnglishWordDo w,LoginUserBo o){var r=new PublishResultBo();r.prod=true;return r;}
"""
footer="""static int failures;static void check(boolean x,String n){System.out.println((x?"PASS ":"FAIL ")+n);if(!x)failures++;}public static void main(String[]args){for(Integer flag:Arrays.asList(1,0,null)){var p=new EligibilityProbe();p.row.eligible=flag;boolean pub=p.publishAutoFillWord(1L,null).isProdPublished();check(pub==Integer.valueOf(1).equals(flag),"same-second eligibility="+flag+" published="+pub);}if(failures>0)System.exit(1);}}
"""
f=java/'EligibilityProbe.java';f.write_text(header+s[a:b]+footer)
r=subprocess.run(['javac','-d',str(java),str(f),str(p)],capture_output=True,text=True)
if r.returncode:print(r.stderr);sys.exit(r.returncode)
r=subprocess.run(['java','-cp',str(java),'EligibilityProbe'],capture_output=True,text=True);(out/(label+'-eligibility.txt')).write_text(r.stdout+r.stderr+'exit='+str(r.returncode)+'\n');print(r.stdout,r.stderr,'exit=',r.returncode);sys.exit(r.returncode)
