package com.jianshui.invoice.service;

import com.alibaba.fastjson.JSONObject;
import com.jianshui.common.core.domain.AjaxResult;
import com.jianshui.common.core.domain.entity.Companyservice;
import com.jianshui.invoice.domain.BillInfo;
import com.jianshui.invoice.domain.Invoice;
import com.jianshui.invoice.domain.Redinfo;
import com.jianshui.invoice.domain.dto.*;
import com.jianshui.invoice.domain.dto.api.*;

import javax.servlet.http.HttpServletRequest;

/**
 * 发票服务接口
 */
public interface IInvoiceApiService {

    /**
     * 发票开具
     *
     * @param billInfo
     * @return
     */
    public HXResponse addInvoice(BillInfo billInfo, Companyservice companyservice) throws IllegalAccessException, InstantiationException;


    /**
     * 发票失败重开接口
     *
     * @param
     */
    public AjaxResult reInvoice(BillInfo billInfo, Companyservice companyservice);

    /**
     * 单个发票查询接口
     *
     * @param billInfo
     * @return
     */
    public HXResponse queryInvoice(QueryBillInfoDTO billInfo, Companyservice companyservice);

    /**
     * 批量发票查询接口
     *
     * @param billInfo
     * @return
     */
    public HXResponse batchQueryInvoices(BillInfo billInfo, String byWhat, Companyservice companyservice);

    /**
     * 范围查询发票接口
     *
     * @param queryJson
     * @return
     */
    public HXResponse scopeQueryInvoices(JSONObject queryJson, Companyservice companyservice);

    /**
     * 申请/上传 红字发票
     *
     * @param redinfo
     */
    public HXResponse uploadRedInfo(Redinfo redinfo, Companyservice companyservice);

    /**
     * 红字信息申请查询
     *
     * @param redinfo
     */
    public AjaxResult queryRedInfo(Redinfo redinfo, Companyservice companyservice);

    /**
     * 红字信息表下载
     */
    public HXResponse downloadRedInfo(DownloadRedInfoDTO redinfo, Companyservice companyservice);

    /**
     * 发票作废
     *
     * @param invoice
     * @return AjaxResult
     */
    public HXResponse deprecateInvoice(JSONObject invoice, Companyservice companyservice);

    /**
     * 发票作废结果查询
     *
     * @param invoice
     * @param companyservice
     * @return
     */
    public HXResponse deprecateQueryInvoice(DeprecateQueryInvoiceDTO invoice, Companyservice companyservice);

    /**
     * 打印接口
     *
     * @param invoice
     * @return
     */
    public AjaxResult printInvoice(Invoice invoice, Companyservice companyservice);


    public HXResponse queryPrinter(QueryPrinterDTO queryPrinterDTO, Companyservice companyservice);

    /**
     * 推送消息
     *
     * @return
     */
    public HXResponse pushData(BillInfo billInfo, Companyservice companyservice);

    /**
     * 批量打印
     *
     * @param billInfos
     * @return
     */
    public HXResponse batchPrint(PrintDTO printDTO, Companyservice companyservice);

    /**
     * 同步发票库存
     *
     * @param companyservice
     * @return
     */
    public AjaxResult syncStockInfo(Companyservice companyservice);


    /**
     * 发票签章
     *
     * @param signESealDTO
     * @param companyservice
     * @return
     */
    public HXResponse signInvoice(SignESealDTO signESealDTO, Companyservice companyservice);


    /**
     * 发票专用章图片生成
     *
     * @param createESealDTO
     * @param companyservice
     * @return
     */
    public HXResponse createESeal(CreateESealDTO createESealDTO, Companyservice companyservice);

    /**
     * 发票专用章导入注册
     *
     * @param createESealDTO
     * @param companyservice
     * @return
     */
    public HXResponse registerESeal(RegisterESealDTO createESealDTO, Companyservice companyservice);

    /**
     * 月度汇总信息查询
     *
     * @param summaryReportQueryDTO
     * @param companyservice
     * @return
     */
    public AjaxResult SummaryReport(SummaryReportQueryDTO summaryReportQueryDTO, Companyservice companyservice);

    /**
     * 回调处理
     *
     * @param request
     * @return
     */
    public Object callback(HttpServletRequest request);

    /**
     * 开票回调
     *
     * @param request
     * @return
     */
    public Object addCallback(HttpServletRequest request);

    /**
     * 作废回调
     *
     * @param request
     * @return
     */
    public Object decryptCallback(HttpServletRequest request);

    /** 全电新增接口 **/

    /**
     * 全电发票文件获取
     * @param decryptResult
     * @param companyservice
     * @return
     */
    HXResponse getFileUrl(InvoiceAllFileAcquisitionTWODTO invoiceAllFileAcquisitionTWODTO, Companyservice companyservice);

    /**
     * 全电发票文件获取
     * @param decryptResult
     * @param companyservice
     * @return
     */
    HXResponse getFileAcquisitionOn(InvoiceAllFileAcquisitionOnTWODTO invoiceAllFileAcquisitionOnTWODTO, Companyservice companyservice);

    /**
     *获取人脸二维码
     * @param decryptResult
     * @param companyservice
     * @return
     */
    HXResponse qrcode(JSONObject decryptResult, Companyservice companyservice);

    /**
     *获取人脸二维码
     * @param decryptResult
     * @param companyservice
     * @return
     */
    HXResponse query(JSONObject decryptResult, Companyservice companyservice);

    /**
     *获取发票打印XML
     * @param decryptResult
     * @param companyservice
     * @return
     */
    HXResponse getPrintXML(JSONObject decryptResult, Companyservice companyservice);

    /**
     *快速红冲
     * @param decryptResult
     * @param companyservice
     * @return
     */
    HXResponse issueFastRedInvoice(InvoiceAllKshcTWODTO invoiceAllKshcTWODTO, Companyservice companyservice);

    /**
     *蓝字发票统计
     * @param decryptResult
     * @param companyservice
     * @return
     */
    HXResponse invoiceStatic(JSONObject decryptResult, Companyservice companyservice);

    /**
     *审核红字信息表
     * @param decryptResult
     * @param companyservice
     * @return
     */
    HXResponse auditRedInfo(InvoiceAllShhzTWODTO invoiceAllShhzTWODTO, Companyservice companyservice);


    /**
     * 查询红字信息表明细
     * @param invoiceAllRedInvoiceDetailDTO
     * @param companyservice
     * @return
     */
    HXResponse queryRedInfoDetail(InvoiceAllRedInvoiceDetailTWODTO invoiceAllRedInvoiceDetailDTO, Companyservice companyservice);
}
