package com.jeesharp.business.modules.pay.paysubmerchantapplyment.service;

import com.jeesharp.business.modules.pay.paysubmerchantapplyment.entity.PaySubMerchantApplyment;
import com.jeesharp.business.modules.pay.paysubmerchantapplyment.vo.PaySubMerchantApplymentQueryVO;
import com.jeesharp.framework.mybatis.core.service.BaseInterface;

/**
 * 特约商户进件领域服务接口。
 *
 * @author jeesharp
 * @since 2026-05-26
 */
public interface PaySubMerchantApplymentService extends BaseInterface<PaySubMerchantApplyment, PaySubMerchantApplymentQueryVO> {

    /**
     * 按业务申请编号查询（进件租户维度内唯一）。
     */
    PaySubMerchantApplyment findByBusinessCode(String businessCode, String applymentTenantId);

    /**
     * 按进件所属租户主键查询（每租户仅允许一条有效记录）。
     */
    PaySubMerchantApplyment findByApplymentTenantId(String applymentTenantId);

    /**
     * 统计指定进件租户下的记录数（可选排除当前主键，用于保存前唯一性校验）。
     */
    long countByApplymentTenantId(String applymentTenantId, String excludeId);

    /**
     * 新增进件草稿（仅插入；默认 apply_status=DRAFT）。
     */
    PaySubMerchantApplyment createPaySubMerchantApplyment(PaySubMerchantApplyment entity);

    /**
     * 更新进件（按主键更新已存在行）。
     */
    void updatePaySubMerchantApplyment(PaySubMerchantApplyment entity);

    /**
     * 注销单达到微信终态 FINISH 时，将进件主表标记为「商户已注销」（幂等）。
     *
     * @param applymentId 进件主键
     * @param statusDesc  展示用状态描述，为空时使用枚举默认描述
     */
    void markSubMerchantCancelled(String applymentId, String statusDesc);
}
