package shop.alien.storeplatform.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import shop.alien.entity.result.R;
import shop.alien.entity.store.LifeUser;
import shop.alien.mapper.LifeUserMapper;
import shop.alien.storeplatform.service.MerchantAuthService;
import shop.alien.storeplatform.util.AliApiUtil;

/**
 * web端商户身份验证服务实现类
 *
 * @author ssk
 * @since 2025-01-xx
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class MerchantAuthServiceImpl implements MerchantAuthService {

    private final AliApiUtil aliApiUtil;

    private final LifeUserMapper lifeUserMapper;

    @Override
    public R<String> verifyIdInfo(String name, String idCard, Integer appType) {
        log.info("MerchantAuthServiceImpl.verifyIdInfo?name={}&idCard={}&appType={}", name, idCard, appType);
        
        // 根据端类型查询是否已实名认证（仅用户端限制一证一号；商家端允许多个商户账号使用同一身份证）
        if (appType == 0) {
            // 用户端：查询未注销的用户，同一身份证只能实名一个用户账号
            LambdaQueryWrapper<LifeUser> userWrapper = new LambdaQueryWrapper<>();
            userWrapper.eq(LifeUser::getIdCard, idCard)
                       .eq(LifeUser::getRealName, name)
                       .eq(LifeUser::getLogoutFlag, 0);  // 只查询未注销的用户
            if (lifeUserMapper.selectCount(userWrapper) > 0) {
                return R.fail("该身份证已实名认证过");
            }
        }
        // 商家端（appType=1）：不校验身份证是否已被其他商户使用，允许多个商户账号使用同一身份证，仅做支付宝二要素核验
        
        // 调用支付宝身份验证接口
        if (aliApiUtil.verifyIdCard(name, idCard)) {
            return R.success("身份验证成功");
        }
        
        return R.fail("身份证号与姓名不一致，请检查后重新填写");
    }
}

