package com.appstrax.cordova.plugin;

import android.content.Context;

import android.content.SharedPreferences;
import android.preference.PreferenceManager;

import com.appstrax.cordova.plugin.OTGDevice;
import com.appstrax.cordova.plugin.PL2303Driver;

import java.io.IOException;

public class DriverService {
    private static final int OTG_DISP_CHAR = 0;
    private static final int OTG_LINEFEED_CODE_CRLF = 1;
    private static final int OTG_LINEFEED_CODE_LF = 2;
    private static int mWriteLinefeedCode = OTG_LINEFEED_CODE_LF;
    private static int mReadLinefeedCode = OTG_LINEFEED_CODE_LF;
    private static int mDisplayType = OTG_DISP_CHAR;
    private static PL2303Driver.BaudRate mBaudrate = PL2303Driver.BaudRate.B38400;
    private static PL2303Driver.DataBits mDataBits = PL2303Driver.DataBits.D8;
    private static PL2303Driver.Parity mParity = PL2303Driver.Parity.NONE;
    private static PL2303Driver.StopBits mStopBits = PL2303Driver.StopBits.S1;
    private static PL2303Driver.FlowControl mFlowControl = PL2303Driver.FlowControl.OFF;

    public static void loadDefaultSettingValues(PL2303Driver mPL2303Driver, Context context) {
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        if (mPL2303Driver.isConnected()) {
            if (!mPL2303Driver.InitByBaudRate(PL2303Driver.BaudRate.B38400, 700)) {
                return;
            } else {
                SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
                String res = pref.getString("display_list", Integer.toString(OTG_DISP_CHAR));
                mDisplayType = Integer.valueOf(res);

                res = pref.getString("readlinefeedcode_list", Integer.toString(OTG_LINEFEED_CODE_CRLF));
                mReadLinefeedCode = Integer.valueOf(res);

                res = pref.getString("writelinefeedcode_list", Integer.toString(OTG_LINEFEED_CODE_CRLF));
                mWriteLinefeedCode = Integer.valueOf(res);

                res = pref.getString("databits_list", PL2303Driver.DataBits.D8.toString());
                mDataBits = PL2303Driver.DataBits.valueOf(res);

                res = pref.getString("parity_list", PL2303Driver.Parity.NONE.toString());
                mParity = PL2303Driver.Parity.valueOf(res);

                res = pref.getString("stopbits_list", PL2303Driver.StopBits.S1.toString());
                mStopBits = PL2303Driver.StopBits.valueOf(res);

                res = pref.getString("flowcontrol_list", PL2303Driver.FlowControl.OFF.toString());
                mFlowControl = PL2303Driver.FlowControl.valueOf(res);

                res = pref.getString("baudrate_list", PL2303Driver.BaudRate.B38400.toString());
                mBaudrate = PL2303Driver.BaudRate.valueOf(res);

                try {
                    mPL2303Driver.setup(mBaudrate, mDataBits, mStopBits, mParity, mFlowControl);
                } catch (IOException e) {
                    System.out.println("Cameron: Catch Error Line 162:" + e.toString());
                }
            }
        } else {
            System.out.println("Cameron: PL2303Driver.isConnected = false");
        }
    }
}