package com.yc.ship.module.ota.service.password;


import com.yc.ship.framework.common.pojo.PageResult;
import com.yc.ship.module.ota.controller.admin.password.vo.OperatePasswordCheckAndResetReqVO;
import com.yc.ship.module.ota.controller.admin.password.vo.OperatePasswordPageReqVO;
import com.yc.ship.module.ota.controller.admin.password.vo.OperatePasswordSaveReqVO;
import com.yc.ship.module.ota.controller.admin.password.vo.OperatePasswordUpdateReqVO;
import com.yc.ship.module.ota.dal.dataobject.password.OperatePasswordDO;

import javax.validation.Valid;

/**
 * 操作密码 Service 接口
 *
 * @author 管理员
 */
public interface OperatePasswordService {

    /**
     * 创建操作密码
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createOperatePassword(@Valid OperatePasswordSaveReqVO createReqVO);

    /**
     * 更新操作密码
     *
     * @param updateReqVO 更新信息
     */
    void updateOperatePassword(@Valid OperatePasswordSaveReqVO updateReqVO);

    /**
     * 删除操作密码
     *
     * @param id 编号
     */
    void deleteOperatePassword(Long id);

    /**
     * 获得操作密码
     *
     * @param id 编号
     * @return 操作密码
     */
    OperatePasswordDO getOperatePassword(Long id);

    /**
     * 获得操作密码分页
     *
     * @param pageReqVO 分页查询
     * @return 操作密码分页
     */
    PageResult<OperatePasswordDO> getOperatePasswordPage(OperatePasswordPageReqVO pageReqVO);

    void resetPassword(Integer type, String password);

    /**
     * 判断密码是否匹配
     *
     * @param rawPassword 未加密的密码
     * @param encodedPassword 加密后的密码
     * @return 是否匹配
     */
    boolean isPasswordMatch(String rawPassword, String encodedPassword);

    /**
     * 校验密码是否正确
     * @param reqVO
     * @return
     */
    boolean checkPwd( OperatePasswordCheckAndResetReqVO reqVO);

    /**
     * 修改操作密码
     * @param reqVO
     */
    void updatePassword(OperatePasswordUpdateReqVO reqVO);

    /**
     * 验证用户是否有该类型密码
     * @param type
     * @return
     */
    boolean validateExists(Integer type);
}