package com.qianmi.hardwarekit.sprt;

import android.util.Log;

import com.printer.sdk.PrinterConstants;
import com.printer.sdk.PrinterInstance;
import com.printer.sdk.Table;

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * Created by xiayinglin on 2017/5/2.
 */
class PrinterHelper {

    static void printTips(PrinterInstance printer, TipsBean tipsBean) {
        StringBuffer sb = new StringBuffer();

        printer.setPrinter(PrinterConstants.Command.ALIGN, PrinterConstants.Command.ALIGN_CENTER);
        printer.setFont(0, 1, 1, 0, 0);
        printer.printText(tipsBean.getStoreName() + "\n");

        printer.setPrinter(PrinterConstants.Command.ALIGN, PrinterConstants.Command.ALIGN_LEFT);
        // 字号使用默认
        printer.setFont(0, 0, 0, 0, 0);
        sb.append("单号:").append(tipsBean.getTid()).append("\n");
        sb.append("时间:").append(tipsBean.getPayTime()).append("\n");
        sb.append("支付方式:").append(tipsBean.getPayType()).append("\n");
        sb.append("--------------------------------\n");
        printer.printText(sb.toString()); // 打印
        printTable(printer, tipsBean);
        sb = new StringBuffer();
        String[][] aaa = {
                {"数量:", tipsBean.getTotalItem(), "优惠:", tipsBean.getDiscountFee()},
                {"金额:", tipsBean.getTotalMoney(), "实收:", tipsBean.getTotalFee()},
                {"找零:", tipsBean.getOddChange(), "  ", "  "}};
        row4(printer, aaa);
        sb.append("会员卡号:").append(tipsBean.getCardNo()).append("\n");
        sb.append("积分余额:").append(tipsBean.getBalance()).append("\n");
        sb.append("--------------------------------\n");
        printer.printText(sb.toString());
        printer.setPrinter(PrinterConstants.Command.ALIGN, PrinterConstants.Command.ALIGN_CENTER);
        printer.setFont(0, 0, 0, 0, 0);
        printer.printText(tipsBean.getBottomText() + "\n");
        printer.setPrinter(PrinterConstants.Command.PRINT_AND_WAKE_PAPER_BY_LINE, 3);
    }


    /**
     * 打印商品列表
     *
     * @param mPrinter
     * @param tips
     */
    private static void printTable(PrinterInstance mPrinter, TipsBean tips) {

        String column = "商品名称;单价;数量;小计";
        Table table = new Table(column, ";", new int[]{12, 7, 8, 8});
        // String column = "商品名称;单价;数量";
        // Table table = new Table(column, ";", new int[]{18, 10, 12});
        for (TipsBean.Items goods : tips.getItems()) {
            try {
//                byte[] nameTitles = "              ".getBytes("GBK");
                byte[] itemNameTitles = goods.getItemName().getBytes("GBK");
//                for (int i = 0; i < nameTitles.length; i++) {
//                    if (i < itemNameTitles.length) {
//                        nameTitles[i] = itemNameTitles[i];
//                    }
//                }
                String tempNameTitles;
                if (itemNameTitles.length > 32) {
                    byte[] bs = new byte[32];
                    System.arraycopy(itemNameTitles, 0, bs, 0, 28);
                    bs[29] = '.';
                    bs[30] = '.';
                    bs[31] = '.';
                    tempNameTitles = new String(bs, "GBK");
                } else {
                    tempNameTitles = new String(itemNameTitles, "GBK");
                }
                tempNameTitles = tempNameTitles.replace("�", " ");

                float v = Float.valueOf(goods.getItemPrice()) * Float.valueOf(goods.getItemNum());
                table.addRow("" + tempNameTitles + ";" + goods.getItemPrice() + ";" + goods.getItemNum() + ";" + new DecimalFormat("#.00").format(v));
                table.setColumnAlignRight(false);
            } catch (UnsupportedEncodingException e) {
                Log.e(PrinterHelper.class.getSimpleName(), e.getLocalizedMessage());
                e.printStackTrace();
            }
        }
        mPrinter.printTable(table);
    }

    private static void row4(PrinterInstance mPrinter, String[][] values) {
        mPrinter.printText("--------------------------------\n");
        String column = " ; ; ; ";
        Table table = new Table(column, ";", new int[]{5, 12, 5, 12});
        for (String[] v : values) {
            table.addRow("" + v[0] + ";" + v[1] + ";" + v[2] + ";" + v[3]);
        }
        mPrinter.printTable(table);
        mPrinter.printText("--------------------------------\n");
    }
}