from pathlib import Path
import subprocess,sys
out=Path(__file__).resolve().parent;java=out/'job-pause-src';classes=out/'job-pause-classes';classes.mkdir(exist_ok=True)
def stub(name,body):
 p=java/(name.replace('.','/')+'.java');p.parent.mkdir(parents=True,exist_ok=True);p.write_text('package '+name.rsplit('.',1)[0]+';\n'+body)
stub('cn.jojo.cc.biz.common.config.EnglishDictConfig','public class EnglishDictConfig{public boolean total=true,execution=true;public boolean isSegmentEnabled(){return total;}public boolean isSegmentExecutionEnabled(){return execution;}}')
stub('cn.jojo.cc.core.bo.LoginUserBo','public class LoginUserBo{}')
stub('cn.jojo.cc.biz.service.english.segment.EnglishSegmentOutputIdentityRecoveryBizService','public class EnglishSegmentOutputIdentityRecoveryBizService{public int calls;public String runOnce(cn.jojo.cc.core.bo.LoginUserBo o){calls++;return "scanned";}}')
stub('cn.jojo.cc.worker.task.BaseScheduleJobHandler','public class BaseScheduleJobHandler{public static final cn.jojo.cc.core.bo.LoginUserBo SYSTEM=new cn.jojo.cc.core.bo.LoginUserBo();}')
stub('cn.jojo.cc.common.enums.RedisKeyEnum','public enum RedisKeyEnum{ENGLISH_SEGMENT_REFRESH_LOCK;public String buildKey(){return "segment-refresh-lock";}}')
stub('org.redisson.api.RLock','public class RLock{public boolean acquired=true;public boolean tryLock(long n,java.util.concurrent.TimeUnit t)throws InterruptedException{return acquired;}public boolean isHeldByCurrentThread(){return acquired;}public void unlock(){}}')
stub('org.redisson.api.RedissonClient','public class RedissonClient{public int calls;public RLock lock=new RLock();public RLock getLock(String s){calls++;return lock;}}')
stub('com.xxl.job.core.handler.annotation.XxlJob','public @interface XxlJob{String value();}')
stub('com.xxl.job.core.biz.model.ReturnT','public class ReturnT<T>{public static final int FAIL_CODE=500;public ReturnT(T t){}public ReturnT(int n,T t){}}')
code='''import cn.jojo.cc.worker.task.*;import cn.jojo.cc.biz.common.config.*;import cn.jojo.cc.biz.service.english.segment.*;import org.redisson.api.*;
public class JobPauseProbe{static void set(Object o,String n,Object v)throws Exception{var f=o.getClass().getDeclaredField(n);f.setAccessible(true);f.set(o,v);}public static void main(String[]args)throws Exception{for(int mode=0;mode<3;mode++){var j=new EnglishSegmentOutputIdentityRecoveryJobHandler();var c=new EnglishDictConfig();c.total=mode!=0;c.execution=mode!=1;var r=new RedissonClient();var s=new EnglishSegmentOutputIdentityRecoveryBizService();set(j,"englishDictConfig",c);set(j,"redissonClient",r);set(j,"service",s);j.recover(null);boolean expected=mode==2;boolean ok=(r.calls==(expected?1:0)&&s.calls==(expected?1:0));System.out.println((ok?"PASS ":"FAIL ")+"mode="+mode+" locks="+r.calls+" regeneration-service="+s.calls);if(!ok)System.exit(1);}}}'''
p=java/'JobPauseProbe.java';p.write_text(code)
root=out.parent/'code';jars=[Path.home()/'.m2/repository/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar',Path.home()/'.m2/repository/org/springframework/spring-context/6.2.0/spring-context-6.2.0.jar'];cp=':'.join(map(str,jars));files=list(java.rglob('*.java'))+[root/'api/admin-worker/src/main/java/cn/jojo/cc/worker/task/EnglishSegmentOutputIdentityRecoveryJobHandler.java']
r=subprocess.run(['javac','-cp',cp,'-d',str(classes),*map(str,files)],capture_output=True,text=True)
if r.returncode:print(r.stderr);sys.exit(r.returncode)
r=subprocess.run(['java','-cp',str(classes)+':'+cp,'JobPauseProbe'],capture_output=True,text=True);(out/'green-job-pause.txt').write_text(r.stdout+r.stderr+'exit='+str(r.returncode)+'\n');print(r.stdout,r.stderr,'exit=',r.returncode);sys.exit(r.returncode)
