package com.neptune.modules;

import com.neptune.utils.MyLog;
import com.pax.dal.IMag;
import com.pax.dal.entity.TrackData;
import com.pax.dal.exceptions.MagDevException;

import com.neptune.base.NeptuneAppMgmt;

public class Mag {

    private static Mag mag;

    private IMag iMag;

    private Mag() {
        iMag = NeptuneAppMgmt.getDal().getMag();
    }

    public static Mag getInstance() {
        if (mag == null) {
            mag = new Mag();
        }
        return mag;
    }

    public void open() throws MagDevException {
        try {
            iMag.open();
            MyLog.logV("open");
        } catch (MagDevException e) {
            e.printStackTrace();
            MyLog.logE(e.toString());
            throw e;
        }
    }

    public void close() throws MagDevException {
        try {
            iMag.close();
            MyLog.logV("close");
        } catch (MagDevException e) {
            e.printStackTrace();
            MyLog.logE( e.toString());
            throw e;
        }
    }

    // Reset magnetic stripe card reader, and clear buffer of magnetic stripe card.
    public void reset() throws MagDevException {
        try {
            iMag.reset();
            MyLog.logV("reSet");
        } catch (MagDevException e) {
            e.printStackTrace();
            MyLog.logE(e.toString());
            throw e;
        }
    }

    // Check whether a card is swiped
    public boolean isSwiped() throws MagDevException {
        boolean b = false;
        try {
            b = iMag.isSwiped();
        } catch (MagDevException e) {
            e.printStackTrace();
            MyLog.logE( e.toString());
            throw e;
        }
        return b;
    }

    public TrackData read() throws MagDevException {
        try {
            TrackData trackData = iMag.read();
            MyLog.logV("read");
            return trackData;
        } catch (MagDevException e) {
            e.printStackTrace();
            MyLog.logE(e.toString());
            throw e;
        }
    }

}
