package com.ruoyi.web;

import com.itextpdf.text.Document;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.domain.Book;
import com.ruoyi.service.BookService;
import com.ruoyi.web.request.BookDeleteRequest;
import com.ruoyi.web.request.BookListRequest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.skywalking.apm.toolkit.trace.Tag;
import org.apache.skywalking.apm.toolkit.trace.Tags;
import org.apache.skywalking.apm.toolkit.trace.Trace;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;


@Api("书籍管理")
@RestController
@RequestMapping("/book")
public class BookController extends BaseController {

    @Autowired
    private BookService bookService;

    @ApiOperation("添加书籍")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/add")
    public R add(@Validated @RequestBody Book book) {
        bookService.save(book);
        return R.ok();
    }

    @ApiOperation("修改书籍")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/edit")
    public R edit(@Validated @RequestBody Book book) {
        bookService.updateById(book);
        return R.ok();
    }

    @ApiOperation("查询书籍列表")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/list")
    public TableDataInfo list(@Validated @RequestBody BookListRequest request) {
        startPage(request);
        List<Book> books = bookService.selectBookList(request.getName());
        return getDataTable(books);
    }
    @ApiOperation("删除书籍")
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/remove")
    public R remove(@Validated @RequestBody BookDeleteRequest request) {
        bookService.removeBatchByIds(Arrays.asList(request.getIds()));
        return R.ok();
    }

    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
    @RequestMapping(method = RequestMethod.POST, value = "/listException")
    public TableDataInfo listException(@Validated @RequestBody BookListRequest request) {
        startPage(request);
        List<Book> books = bookService.selectBookListException(request.getName());
        return getDataTable(books);
    }

    @Anonymous
    @ApiOperation("Download")
    @GetMapping(value = "/download", produces = "application/json")
    public void download(HttpServletResponse response) {
        response.setHeader("content-disposition","attachment;fileName="+"ReceiptPrinter.pdf");
        try {
            // demo-API渲染
            bookService.generateItextPdfDocument(response.getOutputStream());
            // demo-模板
//            bookService.generateTempPDF(response);
            // demo-动态表格
//            bookService.testGeneratePDF(response.getOutputStream());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}