package com.genlot.nativesdk;

import android.content.Context;

import com.genlot.nativesdk.model.GameTicket;

public class SystemNI {

    static {
        System.loadLibrary("GtToolkit");
        System.loadLibrary("GtKernel");
        System.loadLibrary("GtCore");
    }

    /**
     * 初始化本地平台
     *
     * @param context
     * @param path    app包路径files
     * @return
     */
    public native static boolean initNative(Context context, String path);

    /**
     * 启动本地网关服务
     *
     * @return true, false
     */
    public native static boolean startGateway();

    /**
     * 停止本地网关服务
     *
     * @return true, false
     */
    public native static boolean stopGateway();

    /**
     * 调用本地网关服务
     *
     * @return !=0错误
     */
    public native static int callGateway(int tradingCode, byte[] inData, int inSize, byte[] outData, int[] outSize);

    /**
     * 获取游戏个数
     *
     * @return
     */
    public native static int getGameSize();

    /**
     * 获取游戏ID列表
     *
     * @param list
     * @return
     */
    public native static int getGameID(int[] list);


    /**
     * 获得单票保护金额
     *
     * @return
     */
    public native static double getProtectMoney();

    /**
     * 下载文件
     *
     * @param serverFile 服务器文件名
     * @param localFile  本地文件名
     * @param isBP       是否使用端点续传
     * @return !=0错误
     */
    public native static int downloadFile(String serverFile, String localFile, int isBP);

    /**
     * 上传文件
     *
     * @param serverFile 服务器文件名
     * @param localFile  本地文件名
     * @return !=0错误
     */
    public native static int uploadFile(String serverFile, String localFile);

    /**
     * 获取资源下载目录
     *
     * @return
     */
    public native static String getResourcePath();

    /**
     * 获取文件下载目录
     *
     * @return
     */
    public native static String getDownloadPath();

    /**
     * 获取日志文件目录
     *
     * @return
     */
    public native static String getLogPath();

    /**
     * 写错误日志文件
     *
     * @param tag
     * @param logStr
     */
    public native static void writeErrorLogFile(String tag, String logStr);

    /**
     * 终端登录流程
     *
     * @param lineNo
     * @param user
     * @param password
     * @return
     */
    public native static int loginProcess(int lineNo, int user, String password);

    /**
     * 读取最近一张票信息
     *
     * @param ticket
     * @return
     */
    public native static int readLastTicket(GameTicket ticket);

    /**
     * rc4加密，用于特征码加密然后打印PDF417
     *
     * @param srcStringData
     * @return
     */
    public native static String rc4EncryptData(String srcStringData);

    /**
     * rc4解密，用于PDF417解密后传值给服务器
     *
     * @param srcStringData
     * @return
     */
    public native static String rc4DecryptData(String srcStringData);

    /**
     * 特征码
     *
     * @param ticket
     * @return
     */
    public native static String featureCode(GameTicket ticket);

    /**
     * 验票码
     *
     * @param ticket
     * @return
     */
    public native static String verifyCode(GameTicket ticket);

    /**
     * 获取终端ID
     *
     * @return
     */
    public native static long getTerminalID();

    /**
     * 获取终端认证码
     *
     * @return
     */
    public native static long getTerminalCert();

    /**
     * 保存终端ID
     *
     * @param terminalID
     * @return
     */
    public native static int setTerminalID(long terminalID);

    /**
     * 获取通信线路参数
     *
     * @param sn 0
     * @return
     */
    public native static String getCommLine(int sn);

    /**
     * 获取通信线路IP
     *
     * @param sn 端口号
     * @return
     */
    public native static String getCommIP(int sn);

    /**
     * 获取通信线路PORT
     *
     * @param sn 端口号
     * @return
     */
    public native static int getCommPort(int sn);

    /**
     * 设置通讯线路参数
     *
     * @param sn
     * @param ip
     * @param port
     * @return
     */
    public native static boolean setCommLine(int sn, String ip, int port);

    /**
     * 终端是否首次启动
     *
     * @return
     */
    public native static boolean isFirstLoad();

    /**
     * 首次启动配置
     *
     * @return
     */
    public native static int firstLoad();

    /**
     * 强制自动升级
     *
     * @return
     */
    public native static boolean isEnforceUpdate();
}
