package com.sdtool.common.api.mall;

import com.sdtool.common.api.ScriptService;
import com.sdtool.common.datas.TokenUserFrom;
import com.sdtool.common.entity.base.InvokeCallParams;
import com.sdtool.common.entity.base.InvokeCallResult;
import com.sdtool.common.entity.base.ProcessStringItem;
import com.sdtool.common.entity.mall.MallUser;
import com.sdtool.common.entity.site.ERPTokenUser;
import com.sdtool.common.entity.system.AuthCode;
import com.sweetfish.service.RetResult;

public interface MallFrontService extends ScriptService {

    RetResult<InvokeCallResult> callMall(InvokeCallParams source, Boolean needLogin, ERPTokenUser currentUser, String dataSourceId, long supplierCode);

    //region 注册检测

    int accountExists(String loginAccount, String dataSourceId, long supplierCode);

    long accountId(String loginAccount, String dataSourceId, long supplierCode);

    /**
     * 商城用户注册
     * @param registerUser 用户对象
     * @param sessionId     这个脚本里获取不到
     * @param locationX     拼图验证位置
     * @param smsCode       短信
     * @return 用户对象
     */
    public RetResult<MallUser> registerMallUser(MallUser registerUser, String sessionId, int locationX, String smsCode,
                                                String dataSourceId, long supplierCode);

    /**
     * 生成拼图验证码信息
     *
     * @param sessionId 会话id
     * @param authName  验证名称
     * @param userFrom  用户来源
     * @return 验证码信息
     */
    RetResult<AuthCode> generateAuthCode(String sessionId, String authName, TokenUserFrom userFrom, String dataSourceId, long supplierCode);

    /**
     * 检查滑块位置是否正确
     *
     * @param sessionId 会话id
     * @param locationX 滑块位置
     * @return 验证信息
     */
    RetResult<ProcessStringItem> checkPuzzleX(String sessionId, String authName, int locationX, String dataSourceId, long supplierCode);

    /**
     * 注册发短信接口
     *
     * @param sessionId 会话id
     * @param phoneNo   电话
     * @param locationX 滑块位置
     * @return 短信发送
     */
    RetResult<ProcessStringItem> regSendSms(String sessionId, String phoneNo, int locationX, String dataSourceId, long supplierCode);

    //endregion

    //region 忘记密码

    /**
     *
     */
    RetResult<ProcessStringItem> fwdSendSms(String sessionId, String phoneNo, int locationX, String dataSourceId, long supplierCode);

    /**
     * 重置密码(找回密码)
     */
    RetResult<ProcessStringItem> fwdPassword(String account, String sessionId, int locationX, String smsCode, String dataSourceId, long supplierCode);

    //endregion

}
