package com.ruoyi.system.service;

import com.ruoyi.system.domain.dto.StoreEzpayCredentialDto;
import com.ruoyi.system.domain.vo.PosStoreEzpayVo;

import java.util.List;

/**
 * 门店 ezPay 发票开通管理 Service。
 *
 * @author ruoyi
 * @date 2026-06-15
 */
public interface IPosStoreEzpayService {

    /** 门店 ezPay 开通管理列表（配合 PageHelper 分页）。 */
    List<PosStoreEzpayVo> selectEzpayStoreList(PosStoreEzpayVo query);

    /** 门店 ezPay 详情。 */
    PosStoreEzpayVo selectEzpayStoreDetail(Long storeId);

    /** 发起申请（未申请 0 → 申请中 1）。 */
    int apply(Long storeId);

    /**
     * 持久化凭证并标记已开通（status=2、enabled=1、approvedTime）。
     * 不含 ezPay 联网验证——由 Controller 层验证通过后再调用本方法。
     */
    int enableWithCredentials(StoreEzpayCredentialDto dto);

    /** 记录凭证验证结果（lastVerifyResult），不改状态。 */
    int recordVerifyResult(Long storeId, String result);

    /** 停用 / 恢复（仅 status=2 有效），翻转 isEnabled。 */
    int toggleEnable(Long storeId);

    /** 标记免用发票 / 恢复需开票（写 pos_store.invoice_exempt）。 */
    int markExempt(Long storeId, Integer invoiceExempt);

    /** 重置状态（凭证作废/重新申请），清 approvedTime。 */
    int reset(Long storeId);

    /** 商家上传统一编号（按 store_id upsert ubn，不改状态）。 */
    int uploadUbn(Long storeId, String ubn);

    /** 商家端读取已保存的统一编号（无则返回 null）。 */
    String getUbn(Long storeId);
}
