package com.zanchina.check.common;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * @author zhoubinglong
 */
@Slf4j
public class ExcelWrite {

    private static ExcelWrite inst = new ExcelWrite();

    private ExcelWrite() {
    }

    private String sheetName = "Sheet1";

    public void setSheetName(String sheetName) {
        this.sheetName = sheetName;
    }

    public static ExcelWrite getInst() {
        return inst;
    }

    public void write(ExcelData data, File out) {
        write(data, out, null);
    }

    public void write(ExcelData data, File out, File template) {
        Workbook workbook = null;
        Sheet sheet = null;
        if (null != template) {
            try {
                if (template.getName().contains(".")&&template.getName().substring(template.getName().lastIndexOf(".")+1, template.getName().length()).toLowerCase().equals("xls")) {
                    workbook = new HSSFWorkbook(new POIFSFileSystem(new FileInputStream(template)));
                }else{
                    workbook=new XSSFWorkbook(new FileInputStream(template));
                }
                sheet = workbook.getSheetAt(0);
            } catch (Exception e) {
            }
        } else {
            if (out.getName().contains(".")&&out.getName().substring(out.getName().lastIndexOf(".")+1, out.getName().length()).toLowerCase().equals("xls")) {
                workbook = new HSSFWorkbook();
            }else{
                workbook=new XSSFWorkbook();
            }
            sheet = workbook.createSheet(sheetName);
        }
        if (null != data.getTitles() && data.getTitles().length > 0) {
            Row titleRow = sheet.createRow(0);
            for (int j = 0; j < data.getTitles().length; j++) {
                Cell busiDataCell = titleRow.createCell(j);
                busiDataCell.setCellValue(data.getTitles()[j]);
            }
        }

        for (int i = 0; i < data.getDatas().size(); i++) {
            String[] arr = data.getDatas().get(i);
            Row busiDataRow = sheet.createRow(i + 1);
            for (int j = 0; j < arr.length; j++) {
                Cell busiDataCell = busiDataRow.createCell(j);
                busiDataCell.setCellValue(arr[j]);
            }
        }
        try {
            OutputStream os = new FileOutputStream(out);
            workbook.write(os);
            if (null != workbook) {
                workbook.close();
            }
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
    }

}