package com.boco.nbd.wios.manage.controller;

import com.boco.nbd.wios.manage.entity.bo.InvoiceQueryBo;
import com.boco.nbd.wios.manage.entity.settlement.vo.InvoiceDTO;
import com.boco.nbd.wios.manage.entity.settlement.vo.InvoiceDetailDTO;
import com.boco.nbd.wios.manage.service.impl.InvoiceService;
import com.ihidea.component.api.v2.BaseResponse;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;

import java.util.List;

/**
 * 发票管理接口
 * 
 * @author xgl
 * @version [版本号, 2020年10月13日]
 */
@RestController
@RequestMapping("api")
@Api(tags = "发票管理接口")
@ApiIgnore
public class InvoiceController {
    @Autowired
    private InvoiceService invoiceService;
    
    /**
     * 查询发票列表
     *
     * @param condition
     * @return
     */
    @GetMapping(value = "invoice/all")
    @ApiOperation(value = "查询发票列表")
    public BaseResponse<List<InvoiceDTO>> getList(InvoiceQueryBo condition) {
        List<InvoiceDTO> list = invoiceService.getList(condition);
        return new BaseResponse<>(list);
    }
    
    /**
     * 查询发票详情
     *
     * @param invoiceId
     * @return
     */
    @GetMapping(value = "invoice/detail")
    @ApiOperation(value = "查询发票详情")
    @ApiImplicitParams({@ApiImplicitParam(paramType = "query", name = "invoiceId", value = "发票id", required = false, dataType = "String"),})
    public BaseResponse<InvoiceDetailDTO> getDetail(String invoiceId) {
        InvoiceDetailDTO dto = invoiceService.getDetail(invoiceId);
        return new BaseResponse<>(dto);
    }

    /**
     * 待开票的纸票出票
     *
     * @param outInvoiceId
     * @return
     */
    @GetMapping(value = "invoice/print")
    @ApiOperation(value = "待开票的纸票出票")
    @ApiImplicitParams({@ApiImplicitParam(paramType = "query", name = "outInvoiceId", value = "第三方发票id", required = true, dataType = "String"),})
    public BaseResponse<Object> print(String outInvoiceId) {
        invoiceService.print(outInvoiceId);
        return new BaseResponse<>();
    }

    /**
     * 已开票纸票发货
     * @param invoiceId
     * @param logisticsComp
     * @param logisticsNo
     * @return
     */
    @GetMapping(value = "invoice/setLogistics")
    @ApiOperation(value = "已开票纸票发货")
    @ApiImplicitParams({@ApiImplicitParam(paramType = "query", name = "invoiceId", value = "发票id", required = true, dataType = "String"),
            @ApiImplicitParam(paramType = "query", name = "logisticsComp", value = "物流公司", required = true, dataType = "String"),
            @ApiImplicitParam(paramType = "query", name = "logisticsNo", value = "物流单号", required = true, dataType = "String"),
    })
    public BaseResponse<Object> setLogistics(String invoiceId,String logisticsComp,String logisticsNo) {
        invoiceService.setLogistics(invoiceId,logisticsComp,logisticsNo);
        return new BaseResponse<>();
    }
}