package com.brilliance.isc.common.lock;

public interface BizLocker {

    boolean lock(String key,String value,long seconds);

    LockInfo getLock(LockInfo lockInfo);


    /**
     * 是否可入，1、如果没锁，可入；2、如果锁定交易是当前人，当前交易，可入
     * @param lockInfo
     * @return
     */
    boolean isAccessible(LockInfo lockInfo);

    /**
     * 是否可入，1、如果没锁，可入；2、如果锁定交易是当前人，当前交易，可入 3 isValid:Y:只要被锁就提示，N 可以重入
     * @param lockInfo
     * @return
     */
    boolean isAccessible(LockInfo lockInfo,String isValid);

    /**
     * 入口函数，锁定
     * @param lockInfo
     * @param seconds
     * @return
     */
    boolean lock(LockInfo lockInfo,long seconds);

    /**
     * 入口函数，锁定
     * @param lockInfo 锁信息
     * @return true 加锁成功 false 加锁失败
     */
    boolean lock(LockInfo lockInfo);

    /**
     * 入口函数，解锁
     * @param lockInfo
     * @return
     */
    boolean unlock(LockInfo lockInfo);

    /**
     * 强制加锁
     * @param lockInfo
     * @return
     */
    boolean lockForce(LockInfo lockInfo);

    /**
     * 强制加锁
     * @return
     */
    boolean lockForce(String key,String value,long seconds);

    /**
     * 强制解锁
     * @param lockInfo
     * @return
     */
    boolean unlockForce(LockInfo lockInfo);


    /**
     * 删除当前交易相关锁信息
     */
    boolean unlockAllOfTrans(String transName,String userId);


    /**
     * 刪除用戶所有的锁
     * @param userId
     * @return
     */
    default boolean unlockAllOfUser(String userId){
        return true;
    }
}
