package com.ruoyi.system.service;

import com.ruoyi.system.domain.PosStoreOmg;
import com.ruoyi.system.domain.dto.StoreOmgCredentialDto;
import com.ruoyi.system.domain.vo.PosStoreOmgVo;

import java.util.List;

/**
 * 门店 OMG(歐買尬) 支付凭证 Service。
 *
 * <p>纯 DB 操作；OMG 联网验证（QueryTradeInfo 探测）由 Controller 层完成（避免 system→admin 反向依赖）。
 *
 * @author ruoyi
 * @date 2026-07-29
 */
public interface IPosStoreOmgService {

    /** 取门店已开通且启用的 OMG 凭证（发起支付用）。无则 null。 */
    PosStoreOmg getEnabledCredential(Long storeId);

    /** 按 OMG 商店代号反查已启用凭证（回调用）。无则 null。 */
    PosStoreOmg getEnabledCredentialByMerchantId(String merchantId);

    /** 回调/退款按 MerchantID 读取已配置凭证；停用只阻止新支付，不得阻断在途交易。 */
    PosStoreOmg getCredentialByMerchantId(String merchantId);

    /** 退款/查询补单按 merchant_id + store_id 精确读凭证（同 merchant 多门店时定位本店）。 */
    PosStoreOmg getCredentialByMerchantIdAndStoreId(String merchantId, Long storeId);

    /** 凭证管理列表（配合 PageHelper 分页）。 */
    List<PosStoreOmgVo> selectOmgStoreList(PosStoreOmgVo query);

    /** 门店 OMG 凭证详情。 */
    PosStoreOmgVo selectOmgStoreDetail(Long storeId);

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

    /** 录入凭证并标记已开通（Controller 验证通过后调）。 */
    int enableWithCredentials(StoreOmgCredentialDto dto);

    /** 停用/恢复（仅已开通）。 */
    int toggleEnable(Long storeId);

    /** 重置为申请中（凭证作废/重新申请）。 */
    int reset(Long storeId);

    /** 记录最近一次凭证验证结果。 */
    int recordVerifyResult(Long storeId, String result);

    /** 设置启用支付方式（本期固定 ALL）。 */
    int setEnabledPayments(Long storeId, String payments);
}
