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.*;
import com.jianshui.invoice.domain.dto.*;
import com.jianshui.invoice.domain.dto.api.*;
import com.jianshui.invoice.domain.ele.EleNewMessage;

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 decryptResult
     * @param companyservice
     * @return
     */
    HXResponse queryRedConfirmationList(JSONObject decryptResult, Companyservice companyservice);

    /**
     * 红字确认单明细查询(数电专用)
     * @param decryptResult
     * @param companyservice
     * @return
     */
    HXResponse queryRedConfirmationItemList(JSONObject decryptResult, Companyservice companyservice);

    /**
     * 红字确认单申请(数电专用)
     * @param decryptResult
     * @param companyservice
     * @return
     */
    HXResponse redConfirmationApply(JSONObject decryptResult, Companyservice companyservice);

    /**
     * 红字确认单确认(数电专用)
     * @param decryptResult
     * @param companyservice
     * @return
     */
    HXResponse redConfirmationConfirm(JSONObject decryptResult, Companyservice companyservice);

    /**
     * 数电登录接口(数电专用接口)
     * @param decryptResult
     * @param companyservice
     * @return
     */
    HXResponse rpaLogin(JSONObject decryptResult, Companyservice companyservice);



    /**
     * 数电实名认证状态查询接口(数电专用接口)
     * @param decryptResult
     * @param companyservice
     * @return
     */
    HXResponse getRpaAuthStatus(JSONObject decryptResult, Companyservice companyservice);

    /**
     * 发票平台电子税局账号查询接口(数电专用接口)
     * @param decryptResult
     * @param companyservice
     * @return
     */
    HXResponse queryRpaTaxAccount(JSONObject decryptResult, 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);

    /**
     *全电发票文件获取
     * @return
     */
    HXResponse query(InvoiceAllFileQueryTWODTO invoiceAllFileQueryTWODTO, Companyservice companyservice);

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

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

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

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


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


    /**
     * 异步通用查询
     * @param invoiceAllYhdjDTO
     * @param companyservice
     * @return
     */
    HXResponse queryResultInfo(InvoiceAllQueryTWODTO invoiceAllYhdjDTO, Companyservice companyservice);

    /**
     * 功能描述: 红字信息查询
     * @param findRedInfo
     * @param companyservice
     * @return : java.lang.Object
     */
    EleNewMessage findRedInfo(FindRedInfo findRedInfo, Companyservice companyservice);

    /** 生成动态二维码接口*/
    HXResponse generateDynamicCode(JSONObject decryptResult, Companyservice companyservice);

    /** 机动车加密接口 */
    HXResponse exportVehicleInvoice(JSONObject decryptResult, Companyservice companyservice);


    /** 获取人脸识别结果*/
    HXResponse qrcodeResult(JSONObject decryptResult, Companyservice companyservice);

    /** 回调方法*/
    void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, String identity,Long id);

    /** 邮箱交付*/
    HXResponse mailDelivery(InvoiceMailDeliveryDTO mailDeliveryDTO, Companyservice companyservice);

    /** 订单快捷冲红接口（数电专用接口） */
    HXResponse fastRedInvoice(JSONObject decryptResult, Companyservice companyservice);

    /** 查询快捷冲红结果接口（数电专用接口） */
    HXResponse QueryFastRedInvoiceResult(JSONObject decryptResult, Companyservice companyservice);

    /**  数电获取发票文件接口(数电专用接口) */
    HXResponse QuerySdInvoiceFile(JSONObject decryptResult, Companyservice companyservice);
}