package com.gic.haoban.manage.api.service.licence;

import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.licence.LicenceOrderDTO;
import com.gic.haoban.manage.api.dto.licence.LicenceOrderPageDTO;
import com.gic.haoban.manage.api.dto.licence.RenewalUserDTO;
import com.gic.haoban.manage.api.dto.qdto.licence.LicenceOrderPageQDTO;
import com.gic.haoban.manage.api.dto.qdto.licence.LicenceOrderQDTO;
import com.gic.haoban.manage.api.dto.qdto.licence.RenewalUserQDTO;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author jx
 * @since 2023-03-09
 */
public interface LicenceOrderApiService {

    /**
     * 获取订单详情
     *
     * @param orderId 订单id
     * @return LicenceOrderDTO
     */
    ServiceResponse<LicenceOrderDTO> getLicenceOrderDetail(Long orderId, Integer type);

    /**
     * 删除订单
     *
     * @param orderId 订单id
     * @return
     */
    ServiceResponse<Boolean> deleteLicenceOrder(Long orderId);

    /**
     * 新增或者修改订单详情
     *
     * @param licenceOrderQDTO
     * @return
     */
    ServiceResponse<String> saveOrUpdateLicenceOrder(LicenceOrderQDTO licenceOrderQDTO);

    /**
     * 分页查询订单数据
     *
     * @param licenceOrderPageQDTO
     * @return
     */
    ServiceResponse<Page<LicenceOrderPageDTO>> getLicenceOrderPage(LicenceOrderPageQDTO licenceOrderPageQDTO);

    /**
     * 更新订单状态
     *
     * @param orderId 订单id
     * @param type    订单状态
     * @param wxFlag  1微信订单状态  0 企业微信订单状态
     * @return
     */
    ServiceResponse<Boolean> updateLicenceOrderType(Long orderId, Integer type, String enterpriseId, String wxEnterpriseId, String creatorName, Integer wxFlag);

    /**
     * 订单凭证上传
     *
     * @param orderId 订单id
     * @param voucher 凭证url
     * @return
     */
    ServiceResponse<Boolean> uploadLicenceOrderVoucher(Long orderId, String voucher, String enterpriseId, String wxEnterpriseId, String creatorName);

    /**
     * 订单支付接口
     *
     * @param orderId 订单id
     * @return
     */
    ServiceResponse<String> payLicenceOrder(Long orderId);

    /**
     * 查询企业是否存在订单未支付接口
     *
     * @param wxEnterpriseId 企业微信id
     * @return
     */
    ServiceResponse<String> isPayLicenceOrder(String wxEnterpriseId);

    /**
     * 微信通知回调接口
     */
    ServiceResponse<Boolean> wxCallBack(String params);

    /**
     * 企业微信通知回调接口
     */
    ServiceResponse<Boolean> qywxCallBack(String params);

    /**
     * 保存微信交易信息
     *
     * @param orderId         订单id
     * @param transactionCode 订单编号
     * @param prepayId        微信预支付id
     * @param wxOrderId       微信支付id
     * @return
     */
    ServiceResponse<Boolean> saveTransactionCode(Long orderId, String transactionCode, String prepayId, String wxOrderId, Date payTime,String wxUrl);

    /**
     * 查询订单编号id
     *
     * @param param          查询参数
     * @param type           0 订单编号 1 企业微信订单编号 2微信订单编号 3付费应用企业微信订单编号
     * @param wxEnterpriseId
     * @return
     */
    ServiceResponse<List<String>> getOrderIdList(String param, Integer type, String wxEnterpriseId);

    /**
     * 审核订单
     *
     * @param orderId 订单id
     * @param flag    是否通过 0 否 1是
     * @param reason  不通过原因
     * @return
     */
    ServiceResponse<Boolean> checkLicenceOrder(Long orderId, Integer flag, String reason, String creatorName);

    /**
     * 微信退款
     *
     * @return
     */
    ServiceResponse<Boolean> wxRefund(Long orderId);
    /**
     * 查询开户信息
     */
    ServiceResponse<HashMap<String, String>> getAccountInfo();
    /**
     * 取消企业微信订单
     */
    ServiceResponse<Boolean> cancelQywxOrder(Long orderId);

    /**
     * 是否显示弹窗  true 显示  false 不显示
     * @param wxEnterpriseId
     * @return
     */
    ServiceResponse<HashMap<String, Integer>> hasPopup(String wxEnterpriseId);

    /**
     * 查询企业微信订单状态是否过期
     * @return
     */
    ServiceResponse<Boolean> checkQywxOrderStatus(Long orderId);

    ServiceResponse<Page<RenewalUserDTO>> getRenewalUserPage(RenewalUserQDTO qdto);


}
