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;}
    public PublishResultBo publishAutoFillWord(Long wordId, LoginUserBo operator) {
        EnglishWordDo snapshot = requireWord(wordId);
        return englishDictWriteLockService.callWithWordLock(wordId, snapshot.getWordNormalized(), () -> {
            EnglishWordDo current = requireWord(wordId);
            boolean eligible = cn.jojo.cc.common.enums.english.DictSourceEnum.SEGMENT_AUTOFILL.getCode()
                .equals(current.getSource())
                && EnglishPublishStatusEnum.UNPUBLISHED.getCode().equals(current.getStatus())
                && !Integer.valueOf(1).equals(current.getHasPublished())
                && Objects.equals(current.getCreateTime(), current.getUpdateTime());
            return eligible ? doPublishWord(current, operator) : new PublishResultBo();
        });
    }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);}}
