package com.miya.print;

import android.content.Context;
import android.graphics.Bitmap;

/**
 * 标准打印接口
 *
 * @author pupu
 * @time 2018/12/17
 */
public interface IPrinter {

    /**
     * 居左对齐方式
     */
    int ALIGN_LEFT = 0;

    /**
     * 居中对齐方式
     */
    int ALIGN_CENTER = 1;

    /**
     * 居右对齐方式
     */
    int ALIGN_RIGHT = 2;

    /**
     * 初始化驱动
     *
     * @param context 调用者上下文索引
     * @return true==>初始化成功；false==>初始化失败
     */
    boolean init(Context context);

    /**
     * 销毁资源
     *
     * @return true==>销毁成功；false==>销毁失败
     */
    boolean release();

    /**
     * 打印文字
     *
     * @param align   对齐方式
     * @param size    文字大小
     * @param content 待打印内容
     * @param isFeed  是否走纸，true==>走纸
     * @return 状态码（参考状态码枚举）
     */
    int printText(int align, int size, String content, boolean isFeed);

    /**
     * 打印条码
     *
     * @param align   对齐方式
     * @param content 条码内容
     * @param isFeed  是否走纸，true==>走纸
     * @return 状态码（参考状态码枚举）
     */
    int printBarcode(int align, String content, boolean isFeed);

    /**
     * 打印二维码
     *
     * @param align   对齐方式
     * @param content 条码内容
     * @param isFeed  是否走纸，true==>走纸
     * @return 状态码（参考状态码枚举）
     */
    int printQrcode(int align, String content, boolean isFeed);

    /**
     * 打印图片
     *
     * @param align  对齐方式
     * @param bm     图片
     * @param isFeed 是否走纸，true==>走纸
     * @return 状态码（参考状态码枚举）
     */
    int printImage(int align, Bitmap bm, boolean isFeed);

    /**
     * 切纸
     *
     * @return 状态码（参考状态码枚举）
     */
    int cutPaper();

    /**
     * 设置对齐方式
     *
     * @param align 对齐方式,0：巨左；1：居中；2：居右
     * @return 状态码（参考状态码枚举）
     */
    int setAlign(int align);

    /**
     * 走纸
     *
     * @return 状态码（参考状态码枚举）
     */
    int feedPaper();

    /**
     * 获取打印机状态
     *
     * @return 状态码（参考状态码枚举）
     */
    int getPrinterStatus();

    /**
     * 执行指令
     *
     * @param cmd 指令内容
     * @return 状态码（参考状态码枚举）
     */
    int excuteCmd(String cmd);

    /**
     * 开始新一轮打印
     *
     * @return 状态码（参考状态码枚举）
     */
    int beginPrint();

    /**
     * 结束本轮打印
     *
     * @return 状态码（参考状态码枚举）
     */
    int endPrint();

    /**
     * 设置打印机器名称
     *
     * @param name 打印机器名称
     */
    void setPrinterName(String name);

    /**
     * 获取打印机器名称
     *
     * @return 打印机器名称
     */
    String getPrinterName();

    /**
     * 按当前对齐方式打印文字，内部默认走纸一行，按照当前字符大小打印
     *
     * @param content 待打印文字
     * @return 状态码（参考状态码枚举）
     */
    int printText(String content);

    /**
     * 按当前对齐方式打印图片
     *
     * @param bm 待打印图片
     * @return 状态码（参考状态码枚举）
     */
    int printImage(Bitmap bm);

    /**
     * 按当前对齐方式打印条码（部分打印机可能强制居中打印）
     *
     * @param content 待打印二维码内容
     * @return 状态码（参考状态码枚举）
     */
    int printBarcode(String content);

    /**
     * 按当前对齐方式打印二维码（部分打印机可能强制居中打印或不支持居右打印）
     *
     * @param content 待打印二维码内容
     * @return 状态码（参考状态码枚举）
     */
    int printQrcode(String content);

    /**
     * 按当前对齐方式打印图片，内部默认走纸一行，同时调整图片大小为合适大小（可能会缩放）进行快速打印
     *
     * @param bm 待打印图片
     * @return 状态码（参考状态码枚举）
     */
    int printImageFast(Bitmap bm);
}